トップページ⇒php
216コメント70KB

Session管理してる?

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2001/05/23(水) 23:24ID:ZWP7e.Mk
PHP3だとSession使えないから、id&passをhiddenで吐き出している。
DBで一意のsessionidを作ってやりゃーいいんだけどExpireとか
めんどくさい。

ASPやPHP4ならSession管理楽だよね。
0096名無しさん@お腹いっぱい。01/11/07 02:15ID:WNbh62gs
ん?
クロスサイトスクリプティングでしょ?
00979501/11/07 02:29ID:xHkACnav
>>96
あーホントだ、よく見りゃそうだ。どうもありが�d
これで安心して眠れるぞヽ(´ー`)ノ
0098名無しさん@お腹いっぱい。01/11/08 22:15ID:BR2wW00P
PHP4のセッション初めてつかたけど、
/tmpにセッションごとの変数の値ががんがんたまってます。
もういいやと思ったあたりで消すしかないんでしょうか?
0099名無しさん@お腹いっぱい。01/11/16 10:07ID:dtqn0qNF
ガーベジコレクションで消えてくんじゃない?
0100名無しさん@お腹いっぱい。01/11/16 17:01ID:???
溜まってるっつってんだろが! ワラ
0101名無しさん@お腹いっぱい。01/11/16 17:14ID:???
俺は、php.iniでsession.save_pathを/var/tmp/phpにしておき、cronで
/var/tmp/php以下を掃除するようにしてる。
0102名無しさん@お腹いっぱい。01/11/18 03:56ID:???
>>100-101
マニュアル読み直した方が良いかと思われ。
010310101/11/18 06:25ID:???
>>102
gcで消えることが多いんだけど、消えてないこともあるぞ。
0104名無しさん@お腹いっぱい。01/11/18 12:29ID:???
>>101
session.gc_probabilityでGCの開始確率指定かえてみたら?
010510101/11/18 21:08ID:???
うげ、session.gc_probabilityのマニュアルを良く読むと、in percentって書
いてある。デフォルトは1.0じゃなくて1%ってことだったのカー。
逝ってくる。
0106z01/11/21 00:38ID:???
php3国際版を使ってんだけど、id&pass を hidden で渡してるのはやっぱ気持ち悪い。
早いとこ php4に行きたいなぁ。

ところで、php4のセッション管理って、クラスのインスタンスを
保存できないのだよね? スカラー変数と配列のみ??
インスタンスが保存できればうれしいんだけどな。
0107名無しさん@お腹いっぱい。01/11/21 21:59ID:???
>>106
クラスのインスタンスもセッション登録は可能です。
メンバのみでメソッドはセッションに保存されないけどね

詳細はマニュアルをみれ
0108名無しさん@お腹いっぱい。01/11/21 23:41ID:???
106はマルチだったのか
01099801/11/23 14:24ID:w+gD3nN+
>>99-105
わかりやすい流れで助かりました。
ありがとうございます。
0110名無しさん@お腹いっぱい。01/11/27 16:01ID:cyjl29qD
PHP4でのセッション管理なんですが、
PHP4標準のセッション機能とPHPLIBでのセッション機能、
みなさんどちらを使用されていますか?
どちらを使用しようか迷ってます。
0111age02/01/09 12:58ID:13jpWnyp
age
0112名無しさん@お腹いっぱい。02/01/12 14:03ID:???
age
0113名無しさん@お腹いっぱい。02/01/15 09:56ID:???
「セキュリティホール memo メーリングリスト」で
Apache::Session (Perl モジュール) の話が出てるね。
011411302/01/15 09:58ID:???
あ、
http://memo.st.ryukoku.ac.jp/archive/200201.month/2669.html
http://memo.st.ryukoku.ac.jp/archive/200201.month/2670.html
です。
0115名無しさん@お腹いっぱい02/01/23 02:53ID:???
WebObjects使えば、Session管理は自動。管理そのものに頭を悩ます必要ないです。
そのSession内でやりたいことを記述することに集中できますよ。
PHPもいいですけど、WebObjectsは比較になりませんでした。
0116名無しさん@お腹いっぱい。02/01/24 16:18ID:???
セッション管理、してる?
0117名無しさん@お腹いっぱい。02/02/21 16:29ID:???
結局のところ、session管理にはcookieは使うべきなのだろうか。
クロスサイトスクリプティング等の問題もあるけど。
セッションIDをURLで持たせて行くのは怖いような気がするんですが、みんなはどうやってる?
0118名無しさん@お腹いっぱい。02/02/21 17:02ID:???
くき。
0119名無しさん@お腹いっぱい。02/02/23 11:58ID:???
$_SESSION変数を使うえば透過的に処理してくれそうなんだけど、
使ってる人居る?
0120age02/06/20 21:08ID:iXAPSXQ3
ブラウザを完全に閉じると消える一時的cookieですが、
Proxyサーバーを通している場合、
クライアントがブラウザを閉じてもCookieがProxyサーバーに残りますか?
0121nobodyさん02/06/28 23:42ID:???
>>115
WebObjectsは反則です。あれはVBでWinアプリ作ってる感覚になっちゃいます。
0122nobodyさん02/07/24 21:42ID:sfTx1osq
Perl の CGI::Session::DB_File 使ってるんですが、
ロックファイルはどうやって削除するのがイイんで
しょうか? delete() した後も残りますよね。

Apache::Session::Lock::File だと clean() がある
んだけど… (でもバグってる)
0123山崎渉03/01/15 13:51ID:???
(^^)
0124nobodyさん03/03/09 16:41ID:xF/AergB
複数ページにまたがるアンケートで
URL埋め込みやhiddenを使ってページ間で値を渡してます

URL埋め込みの場合ですが、直打ちで任意のページを表示できてしまうので
アンケートの解答中にふとしたはずみで
直にページに飛んでしまい、解答済みのデータが飛ぶかもしれないと
PATH_INFOを使って判別してるのですが
PATH_INFOは間違った情報を返したりすることはないんでしょうか?
リファは結構ふっとんだりしてくれるので
似たようなことが起こるかと心配で…
0125nobodyさん03/03/10 22:33ID:???
漏れもhidden良く使うかも。 
0126nobodyさん03/03/12 17:37ID:UYTsxMQD
PHPのセッション管理で鯖分散対応の為にセッションハンドラをカスタマイズして、
セッションオブジェクトを外部鯖のDBに保存する方法があるんだが、

http://www.pgsql.info/yohgaki.php
http://www.phpbuilder.com/columns/ying20000602.php3

誰か実際にやっている人います?
0127山崎渉03/03/13 16:59ID:???
(^^)
0128nobodyさん03/03/13 20:01ID:???
>>126
ここのスクリプトを改造して、自前でやってるぞ。
ttp://itb-tech.itboost.co.jp/phptips/view.php?fCID=15
0129nobodyさん03/03/15 00:57ID:???
>>126

おれも使ってる。正月にリニューアルしてwebを2台構成にした。
DBは後ろのネットワークに下げて両方から繋いでる。

www1.hoge.com
www2.hoge.com

の構成でも使えてるヨ。
0130nobodyさん03/03/15 01:14ID:Sqe0b8Ey
セッション:負け組
クッキー:勝ち組
0131nobodyさん03/03/15 18:03ID:YPCssbUz
POSTメソッドを利用して入力フォームからPHPでPostgreSQLにApache経由でデータを登録するプログラムを書いています。
以下のプログラムを冒頭に置くとプログラムの最後の行を示しパーサーエラーで,
停止してしまいます。
session_start();
ob_start("mb_output_handler");

/* データ登録処理 */
if (isset($_POST["sbmt"])) {
/* enctypeがmultipart/form-dataなのでエンコーディング変換 */
while (list($key, $val) = each($_POST)) {
$_SESSION["post"][$key]
= htmlspecialchars(
mb_convert_encoding($val, "EUC-JP", "auto"),
ENT_COMPAT,
"EUC-JP");
}
原因はセッション変数に明示的に変数が設定されていないからでしょうか?

0132nobodyさん03/03/15 18:15ID:???
>131
ただの構文エラーだろ
0133nobodyさん03/03/15 18:53ID:YPCssbUz
>132
サンクス
でも、さっきのプログラムの前に別の関数からデータをセットして
あると動くんだよね
/* セッション変数管理 */
if (!isset($_SESSION["diary_year"])) {
$_SESSION["diary_year"] = date("Y");
}
こんなかんじで
date("Y")って部分は別の関数から定義されてるんだよね
最初にセッション関数が呼び出されたときには、配列の中を空に
しておきたいんですよ、それから簡単なエラーチェックをして
sbmitが実行した時にさっきのプログラムで文字をエンコードしたいよね。
0134nobodyさん03/03/31 23:27ID:7tNuLEs3
今までのログを読んだけれど、なんとなくしかわかってないので、
質問させてください。

Perlで会員管理のしくみをつくってるのですが、

会員情報を入れてあるCSVファイルに、セッションIDの列をつくる。
IDパスワードを入れてもらってログインに成功した場合、
$year.$month.$day.$hour.$min.$$をcryptしたものを、
会員情報のセッションID列と、クッキーの両方に書き込んで、
以降は、そのセッションIDをクッキーでもらったら、それに該当する会員情報を表示する・・・

これって、問題ないでしょうか?
また、セッションIDを暗号化するという場合、上記のようにサーバ側とクライアント側両方を、
cryptするべきなんでしょうか?
0135nobodyさん03/03/31 23:54ID:lrdCZ3fP
>>134

やりかた自体はOK。

cryptはCookieのマジックナンバーを生成するために行うもの。
だからクッキーを生成するときに1回だけ行う。
013613403/04/01 08:35ID:???
>>135
なるほど、ありがとうございますた
0137nobodyさん03/04/01 08:38ID:CaQk8w76
135です。
自己レスだが134には問題あった。

会員テーブルにセッションIDフィールドを持たせるのはよくない。
セッションはセッション管理用のテーブルを別にもたせる。
そのテーブルには、
 セッションID
 ユーザ識別コード
 セッション間で引き渡すデータ
 セッションの最終アクセス日時
などを入れておく。
013813503/04/01 23:57ID:1YIS/hST
>>137
たびたびすみません。

で、正直、>>137のようにするメリットがわかりません。。。
あと、ユーザ識別コードって、
会員テーブルのユニークな主キー(の外部キー)っていうことですか?
0139nobodyさん03/04/02 01:33ID:???
破壊を防ぐ
0140nobodyさん03/04/03 06:17ID:+kJBCXqS
>>138
ユーザ識別コードはユーザごとのユニークなキー
です。セッション間で値を引き渡すだけの簡単な
管理だけなら不要ですね。ログインして利用する
サイトを作るなら必要になると思いますが。

セッション管理の理論は書いてあっても実装まで具体的に
書かれている本って少ないですから、書籍で勉強する
よりホームページで勉強したほうがいいかもね。
014113403/04/04 10:45ID:lpjcObWV
すいません、あとひとつ。

>>137 だと、
もしユーザが「ログアウト」ボタンを押したとき、
クライアントの持ってるクッキーも削除(過去の時間を指定)して、
セッション管理用テーブルから該当レコードを削除すればいいわけですよね?

ただ、ユーザがログアウトボタンを押さずにブラウザを閉じてしまった場合、
該当レコードは削除されないため、レコードがどんどんたまってしまうかと思います。

これは、どうすればいいのでしょう?
ほっとくしかない?あるいは、
どっかのタイミング(そのユーザがまたログインしてきたとき?)に削除するのでしょうか?

あ、そのために「セッションの最終アクセス日時」の列があるのかな?
0142nobodyさん03/04/04 19:30ID:tuNiAs90
>>141
ふつうはサーバでクーロン動かして定期的に掃除してやる。
014314103/04/04 22:50ID:fnHSIfLl
>>142
そっかー。
いまつくってるところ、クーロン使えないんですよね・・・
なら、そのユーザがまたログインしてきたときに、
削除(というか新しいセッションIDに書き換える)
でも、問題とくにないですよね?
014414103/04/05 02:53ID:ur80FjBN
($sec, $min, $hour, $mday, $mon, $year,$wday, $yday, $isdst) = localtime(time);
$year += 1900;#気持ちわるいので、一応4桁にしておく
$sessionid = crypt($year.$mon.$mday.$hour.$min.$sec.$$, "AA");

で、セッションIDを取得したのですが、なんかいアクセスしても、
$sessionid = AAwTU6/kNo2jY という文字列になってしまいます。
なぜなんでしょうか
0145nobodyさん03/04/05 05:27ID:WWynoIxP
>>143
ユーザが再度ログインしたら、前回のそのユーザのセッション
ファイルだけ削除する必要はない。ログインしたらすべての
セッションファイルをチェックして、時間切れになるものをすべて
削除すればOK。
0146nobodyさん03/04/05 08:30ID:LO75gp9Z
ASP VBScriptでsession変数を使ってセッション管理しようおおもうのですが、
ブラウザがわでクッキー無効にされてる場合ってセッション管理できなくなってしまうのでしょうか?その場合はURLにうめこむとか、HiddenでPOSTするとかで対処するしかないのでしょうか?
0147nobodyさん03/04/05 13:05ID:Ia1grhBJ
$sessionid = crypt($year.$mon.$mday.$hour.$min.$sec.$$, "AA");
print $sessionid;

・・と、セッションIDを生成してるのですが、
リロードを何度やっても同じ文字列になってしまい、
わけわからん状態です。。。

どうしてなのでしょうか?
0148nobodyさん03/04/05 14:31ID:???
crypt って、先頭の何文字かしかみてなかったと思う。
014914703/04/05 18:50ID:???
>>148
なーるほど。
調べたら、先頭8文字しか見てないようです
0150nobodyさん03/04/05 18:53ID:???
DES(無印) = 8文字
MD5($1$) = 255文字(?)
BlowFish($2$) = ?
0151nobodyさん03/04/09 05:08ID:???
>>147
セッションを全く理解していないと思われるので、
まずフローチャート描いてみることをお勧めする。
0152山崎渉03/04/17 12:09ID:???
(^^)
0153山崎渉03/04/20 06:23ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0154nobodyさん03/04/22 07:11ID:WjOOaJ36
セッション管理しつつ、2重ログイン(複数の人が同じIDでログイン)を禁止
するには、どうすればいいのでしょうか?
0155(´д`;)ハァハァ 03/04/22 07:52ID:dKeQqhoi
http://www.k-514.com/
0156nobodyさん03/04/22 08:08ID:???
>154
「あなたは本当に○○さんですか?」というダイアログを出す。
SSL 使えないならマジこれしかない。
015715403/04/22 08:12ID:WjOOaJ36
あ、すいません、訂正
2重ログイン(複数の人が同じIDでログイン)
↓
2重ログイン(複数の人が同じIDで、同時に、ログイン)
0158nobodyさん03/04/22 10:54ID:???
>>154
んん? どんなセッション管理の方法を使ってるのかわからんが……。
普通はそんな状況にはならんのではないのか?

IDとセッションを対で運用してる?
一つのIDには一つまでのセッションしかないようにすれば、解決しないか?
0159nobodyさん03/04/22 18:52ID:???
>>157
設計しだいだな。ログイン時の IP アドレスを記録しておいて、
同一 ID に対する最終ログイン IP アドレスしか受け付けないように
するしかないか。

A → ログイン (成功)
A → ページ要求 (成功)
B → ログイン (成功)
A → ページ要求 (失敗)
B → ページ要求 (成功)

これは IP アドレスを個人特定のキーに使っているが、ID に対する
初回ログイン時に Cookie を発行して、ID と Cookie を検証するとか
そういう方法しかない。まぁこの話を聞いてピンとこなきゃあきらめれ。
0160nobodyさん03/04/22 22:54ID:???
Javaを使っている場合、JMSを使ってみるとか。Sessionオブジェクトを一定期間DBなんかに永続化して
ログイン時に同じオブジェクトが永続化されていればログイン中などの判定を下す…
色々な判定基準があるだろうけど。ちょっと実装が難しいかな。
016115403/04/24 01:14ID:Dv9rntoL
>>158
ほんとだ。普通にクッキーと、セッションマスタ.csvをつくってたら、
自然と解決してた。
0162nobodyさん03/04/24 08:35ID:g+kZcsKr
あのー、(トップ含めて)すべてのページをcgi'perl)にして、
セッション管理してたら、共用サーバだと追い出されます?
0163nobodyさん03/04/26 11:29ID:???
>>162

そんなもん、鯖の性能次第だろ。
016416203/04/26 19:48ID:bCd38fy3
>>163
そうなんだ。。。
てっきり、「当たり前だろ」みたいなレスがくるかなと思ってた。
0165nobodyさん03/04/26 20:29ID:M/JTw+9v
        ∧∧  ミ _ ドスッ
        (   ,,)┌─┴┴─┐
       /   つ.;ダブダブ-│
     〜′ /´ └─┬┬─┘
      ∪ ∪      ││ _ε3
               ゛゛'゛'゛
おかずなら過激に
 http://www.dvd01.hamstar.jp
0166bloom03/04/26 20:29ID:4lzrogLr
http://homepage.mac.com/ayaya16/
0167nobodyさん03/05/10 21:17ID:NHls6sVf
age
0168nobodyさん03/05/10 21:48ID:1U30OwKY
http://accessplus.jp/staff/in.cgi?id=10645
http://accessplus.jp/staff/in.cgi?id=10943
http://www.39001.com/cgi-bin/cpc/gateway.cgi?id=pure
http://www.39001.com/cgi-bin/cpc/gateway.cgi?id=neat
0169nobodyさん03/05/22 01:04ID:Ql5nBZ7C
perlとクッキーで強引につくってしまったが重いー
0170動画直リン03/05/22 01:08ID:x2YZ4VCE
http://homepage.mac.com/hitomi18/
0171山崎渉03/05/22 01:55ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
0172山崎渉03/05/28 17:22ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0173山崎 渉03/07/15 11:14ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0174nobodyさん03/07/20 19:23ID:H04Zp+KF
申込フォームがたくさんあるサイトを構築していて、
申込フォームが2,3ページまたがるページが多いとする。
(申込1->申込2->確認->完了のような)
この場合、その申込フォーム毎にsessionで
パラメータ受け渡しするのって割と普通にやるもん?

hiddenで持ちまわしてもいいんだけど、
入力不備があって前のページに戻したい時
入力されたパラメータを維持させた状態で前のページに戻そうとすると
LocationだとGETで渡すしかなくて、それだとURLに出てしまう。

sessionでやれるんであればそのページ自体にPOSTして
入力チェックもそのページ内のコードで完結できて
あとはLocationで飛ばせばすむ。

申込フォーム毎にセッション作るっておかしい?
それくらいhiddenでやるべき?
マジレスきぼん。
0175八重洲支店03/07/20 20:39ID:???
http://life.fam.cx/a007/
0176nobodyさん03/07/20 21:31ID:???
>>174
ある程度の信頼性が求められる場面では、サーバ側にセッション変数保存するのが鉄則。
0177山崎 渉03/08/02 02:25ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0178nobodyさん03/09/04 01:42ID:wD/9gEl4
PHPのsession.gc_probabilityって変更してます?
0179nobodyさん03/09/04 16:49ID:i0S65Zr2
ヤフーのIDってどうやってブラウザーで
セッション情報保持してんの?
クッキーすててもログアウトするまでID残ってんだけど・・・
誰か知らない??
0180nobodyさん03/09/05 23:35ID:???
>>179 サバ側に保存してるのでha?
0181nobodyさん03/09/05 23:46ID:???
>>179
ブラウザがメモリにクッキー持ってるのでは?
0182nobodyさん03/09/10 23:46ID:xZuE4Q/q
ファイルとしてのクッキーは捨ててもメモリーには
残るんですね・・・・・・
0183●のテストカキコ中03/09/10 23:50ID:???
http://ula2ch.muvc.net (このカキコは削除しても良いです)
0184nobodyさん03/12/25 17:34ID:???
レンタルサーバーにショッピングサイトを作りたいのですが
↓みたいなのでいいと思いますか?

使用可能な環境
SSL CGI SQLDB

 ログイン画面→画面1→画面2→画面3
(全部SSL)

1.ログイン画面でID・パスワードを入れる
  SQLDBと比較してOK

2.セッションIDを生成しクッキー作成(期限無効メモリー内)
  サーバー上のセッションIDファイルへ追加

3.画面2→画面3へ移るたびにクッキーの
  セッションIDとサーバーのセッションIDファイルを
  比較してチェック

今迷っているのはセッションIDをどう生成するかです。
また、画面移動するたびにチェックが必要なのでしょうか。
みなさんはどうしていますか?
0185nobodyさん03/12/26 13:34ID:???
PHP4やクッキーでいろいろセッション管理調べて
試したけど、どれも一長一短でいまいち。

そこで、ふと思いついたんだけど
セッションIDなんて使うから危険?
単純に hidden + POST(GETはダメ) + SSL(必須) で
ID+パスワードをパラメータで毎回送って
全ページで認証すればいいような。

PHP使おうが、クッキー使おうがどっちみち
セッションIDの認証は全ページしないといけない
事を考えるとレスポンス自体もそんなにかわらない
ような気がするし、セキュリティーの
観点から見ても結構いいと思うけど
どうでしょうか。

なによりも
携帯端末でもこの仕組みなら問題ないしね。
0186nobodyさん03/12/26 19:06ID:???
アホか・・・
0187nobodyさん03/12/27 00:47ID:???
>>186
じゃオマエのアホじゃない方法を述べてみろ
そして、どこがアホかも述べろ
アホ
0188nobodyさん04/01/31 14:44ID:3hbTQvCa
どなたか、セッション管理について分かりやすく書かれているサイトを教えてくださいませんか
0189nobodyさん04/02/01 01:26ID:???
>>185
セッションIDが何かわかってないな・・
0190nobodyさん04/02/01 02:24ID:???
>>188
http://itbtech.itboost.co.jp/php/php_12.php
0191nobodyさん04/02/01 11:38ID:WI3J2wo7
クッキー吐き出さん、携帯端末でブラウザとサーバー間で行う
セッション管理のような真似はできまつか...
0192 04/02/01 11:41ID:???
>1
当時はPearのSessionライブラリも無かったのか。
0193nobodyさん04/02/01 11:42ID:???
>>191
出来るよ。以上。
0194nobodyさん04/02/01 11:59ID:WI3J2wo7
>>193
どんなテクニックで行うのか教えてもらえませんか、参考になるURLでもいいでつ
よろぴく。
0195nobodyさん04/02/01 12:08ID:???
質問の仕方を覚えたらまた来てくれ。
0196nobodyさん04/02/01 23:33ID:+Nypdzo/
ASPのsession管理ってcookieオフってると使えないのですか?
PHPは?
javaもcookie使ってるの?
■ このスレッドは過去ログ倉庫に格納されています