Session管理してる?
PHP3だとSession使えないから、id&passをhiddenで吐き出している。 DBで一意のsessionidを作ってやりゃーいいんだけどExpireとか めんどくさい。 ASPやPHP4ならSession管理楽だよね。 >>64 Apache 使ってるなら httpd.conf か .htaccess で GET がはじけるだろう。まにあるみれ。 >>66 セッションの登録について PHP4 マニュアルには 「変数名を保持する文字列または変数名からなる配列」 ってあるね。 Java だと Serializable なオブジェクト(Javabean とか)は 出来るのにね〜。 >>69 レスありがと。 あきらめきれずこんなテストコード書いたらちゃんとカウントアプしてくれた。 <?php class testFoo { var $count; function testFoo($i) { $this->count = $i; } function inc() { $this->count++; } function hello() { $this->inc();; echo("hello, " . $this->count . " times.\n"); } } session_start(); if (!isset($obj)) { $obj = new testFoo(0); session_register("obj"); } ?> <html> <h1> <?php $obj->hello(); ?> </h1> </html> /tmp覗いたら obj|O:7:"testfoo":1:{s:5:"count";i:3;} となんとなくシリアライズしてくれてる風味。 >>69 そのマニュアルの記述は、session_register(); の引数は 変数を表す文字列かその配列だよという意味だったんだね。 PHP4で各ユーザのセッションファイル(sess_*)の特定は セッションIDの取得すればよいのですかね? たとえばxxx.php?session_idのような感じでOKかな? じゃ、Hiddenで渡すとき、nameは何になるのでしょうか? 疑問だったので・・・・・。 >>64 例: $value=$HTTP_POST_VARS["hoge"]; これだとGET送信されたhoge(パラメータ名)の値は取れません。 phpの設定によっては使用できませんが。 >>72 セッションIDって今まで意識してなかったけど、取得しないとなにか不都合あるの? >>74 各ユーザのセッション情報を特定するということじゃないのかな? 例えば、各ユーザでカスタマイズされたページを出力 するとか・・・。 >>74 必要性を感じないなら必要なし。 複数のHTTPセッションに渡ってクライアント情報を維持したいときに便利。 >>76 PHP4 でしょ? だったら session_start() するだけて session_register() した変数をとりこんでくれるんだから スクリプト側は session ID を意識しなくていいじゃん。 ああ、そうね。書いてから気づいたよ。 セッション終わっても情報を取っときたいってことね。 PHPのセッションって セッションタイムアウトってゆー概念がないの? (ASPにあるよーなやつ) >>79 あるよ〜。設定はphp.iniじゃなかったかな?覚えてなくてごめん。 >>82 消える確率とか設定あったよね。どうしてランダムなのか理解に苦しんだ。 セッション管理って大丈夫? 二つのページを同時にアクセスした場合とかどうよ セッション情報に「前のページ」とか残して、 それを信用して組んだりできないよね... >>84 >二つのページを同時にアクセスした場合とかどうよ 二つは別セッションになるんじゃないの? >>84 >セッション情報に「前のページ」とか残して、 >それを信用して組んだりできないよね... セッション管理が大丈夫かどうかとは関係ない気が >>85 それは、IEでなんか設定したときだけじゃない? クッキーに関しての質問です。 クッキーに配列を保存できますかね? 例えば、 $data=array( "a" => "hoge1", "b" => "hoge2" ); SetCookie("hogehoge", $data); こんな感じで$data配列を作成しクッキーに保存して、 $c_data=$HTTP_COOKIE_VARS["hogehoge"]; で、データを呼び出して echo"$c_data[a]"; で出力できるようにしたいのですが、 なかなかうまくいかないです。 >>87 こんなスレに書いても、セッション使えで終わると思うが。 再びスレ違い? >>87 Cookie は文字列しか受け付けないだろ? マニュアル (http://www.php.net/manual/en/function.setcookie.php ) を 見れば分かるが、引数は "string" と書いてある。 int setcookie (string name [, string value [, int expire [, string path [, string domain [, int secure]]]]]) マニュアルのサンプルコードにやりたいことのやり方が書いてあるぞ。 >>86 >それは、IEでなんか設定したときだけじゃない? (・∀・)? >>90 クッキーの寿命の話ね。 ひとつのブラウザで1つのセッションになる。 IEは、設定すればウィンドウごとに別セッションになる。 セッションで「前のページ」を保存って話題だから、パラメータでセッション変数渡すことは考えてない。 そんときはパラメータに前ページ情報つければなにも問題ないから。 >>91 >IEは、設定すればウィンドウごとに別セッションになる。 どうやってすんの? そろそろ>>61 について教えて欲しかったり。 age >>96 あーホントだ、よく見りゃそうだ。どうもありがd これで安心して眠れるぞヽ(´ー`)ノ PHP4のセッション初めてつかたけど、 /tmpにセッションごとの変数の値ががんがんたまってます。 もういいやと思ったあたりで消すしかないんでしょうか? 俺は、php.iniでsession.save_pathを/var/tmp/phpにしておき、cronで /var/tmp/php以下を掃除するようにしてる。 >>100-101 マニュアル読み直した方が良いかと思われ。 >>102 gcで消えることが多いんだけど、消えてないこともあるぞ。 >>101 session.gc_probabilityでGCの開始確率指定かえてみたら? うげ、session.gc_probabilityのマニュアルを良く読むと、in percentって書 いてある。デフォルトは1.0じゃなくて1%ってことだったのカー。 逝ってくる。 php3国際版を使ってんだけど、id&pass を hidden で渡してるのはやっぱ気持ち悪い。 早いとこ php4に行きたいなぁ。 ところで、php4のセッション管理って、クラスのインスタンスを 保存できないのだよね? スカラー変数と配列のみ?? インスタンスが保存できればうれしいんだけどな。 >>106 クラスのインスタンスもセッション登録は可能です。 メンバのみでメソッドはセッションに保存されないけどね 詳細はマニュアルをみれ >>99-105 わかりやすい流れで助かりました。 ありがとうございます。 PHP4でのセッション管理なんですが、 PHP4標準のセッション機能とPHPLIBでのセッション機能、 みなさんどちらを使用されていますか? どちらを使用しようか迷ってます。 「セキュリティホール memo メーリングリスト」で Apache::Session (Perl モジュール) の話が出てるね。 WebObjects使えば、Session管理は自動。管理そのものに頭を悩ます必要ないです。 そのSession内でやりたいことを記述することに集中できますよ。 PHPもいいですけど、WebObjectsは比較になりませんでした。 結局のところ、session管理にはcookieは使うべきなのだろうか。 クロスサイトスクリプティング等の問題もあるけど。 セッションIDをURLで持たせて行くのは怖いような気がするんですが、みんなはどうやってる? $_SESSION変数を使うえば透過的に処理してくれそうなんだけど、 使ってる人居る? ブラウザを完全に閉じると消える一時的cookieですが、 Proxyサーバーを通している場合、 クライアントがブラウザを閉じてもCookieがProxyサーバーに残りますか? >>115 WebObjectsは反則です。あれはVBでWinアプリ作ってる感覚になっちゃいます。 Perl の CGI::Session::DB_File 使ってるんですが、 ロックファイルはどうやって削除するのがイイんで しょうか? delete() した後も残りますよね。 Apache::Session::Lock::File だと clean() がある んだけど… (でもバグってる) 複数ページにまたがるアンケートで URL埋め込みやhiddenを使ってページ間で値を渡してます URL埋め込みの場合ですが、直打ちで任意のページを表示できてしまうので アンケートの解答中にふとしたはずみで 直にページに飛んでしまい、解答済みのデータが飛ぶかもしれないと PATH_INFOを使って判別してるのですが PATH_INFOは間違った情報を返したりすることはないんでしょうか? リファは結構ふっとんだりしてくれるので 似たようなことが起こるかと心配で… PHPのセッション管理で鯖分散対応の為にセッションハンドラをカスタマイズして、 セッションオブジェクトを外部鯖のDBに保存する方法があるんだが、 http://www.pgsql.info/yohgaki.php http://www.phpbuilder.com/columns/ying20000602.php3 誰か実際にやっている人います? >>126 ここのスクリプトを改造して、自前でやってるぞ。 ttp://itb-tech.itboost.co.jp/phptips/view.php?fCID=15 >>126 おれも使ってる。正月にリニューアルしてwebを2台構成にした。 DBは後ろのネットワークに下げて両方から繋いでる。 www1.hoge.com www2.hoge.com の構成でも使えてるヨ。 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"); } 原因はセッション変数に明示的に変数が設定されていないからでしょうか? >132 サンクス でも、さっきのプログラムの前に別の関数からデータをセットして あると動くんだよね /* セッション変数管理 */ if (!isset($_SESSION["diary_year"])) { $_SESSION["diary_year"] = date("Y"); } こんなかんじで date("Y")って部分は別の関数から定義されてるんだよね 最初にセッション関数が呼び出されたときには、配列の中を空に しておきたいんですよ、それから簡単なエラーチェックをして sbmitが実行した時にさっきのプログラムで文字をエンコードしたいよね。 今までのログを読んだけれど、なんとなくしかわかってないので、 質問させてください。 Perlで会員管理のしくみをつくってるのですが、 会員情報を入れてあるCSVファイルに、セッションIDの列をつくる。 IDパスワードを入れてもらってログインに成功した場合、 $year.$month.$day.$hour.$min.$$をcryptしたものを、 会員情報のセッションID列と、クッキーの両方に書き込んで、 以降は、そのセッションIDをクッキーでもらったら、それに該当する会員情報を表示する・・・ これって、問題ないでしょうか? また、セッションIDを暗号化するという場合、上記のようにサーバ側とクライアント側両方を、 cryptするべきなんでしょうか? >>134 やりかた自体はOK。 cryptはCookieのマジックナンバーを生成するために行うもの。 だからクッキーを生成するときに1回だけ行う。 135です。 自己レスだが134には問題あった。 会員テーブルにセッションIDフィールドを持たせるのはよくない。 セッションはセッション管理用のテーブルを別にもたせる。 そのテーブルには、 セッションID ユーザ識別コード セッション間で引き渡すデータ セッションの最終アクセス日時 などを入れておく。 >>137 たびたびすみません。 で、正直、>>137 のようにするメリットがわかりません。。。 あと、ユーザ識別コードって、 会員テーブルのユニークな主キー(の外部キー)っていうことですか? >>138 ユーザ識別コードはユーザごとのユニークなキー です。セッション間で値を引き渡すだけの簡単な 管理だけなら不要ですね。ログインして利用する サイトを作るなら必要になると思いますが。 セッション管理の理論は書いてあっても実装まで具体的に 書かれている本って少ないですから、書籍で勉強する よりホームページで勉強したほうがいいかもね。 すいません、あとひとつ。 >>137 だと、 もしユーザが「ログアウト」ボタンを押したとき、 クライアントの持ってるクッキーも削除(過去の時間を指定)して、 セッション管理用テーブルから該当レコードを削除すればいいわけですよね? ただ、ユーザがログアウトボタンを押さずにブラウザを閉じてしまった場合、 該当レコードは削除されないため、レコードがどんどんたまってしまうかと思います。 これは、どうすればいいのでしょう? ほっとくしかない?あるいは、 どっかのタイミング(そのユーザがまたログインしてきたとき?)に削除するのでしょうか? あ、そのために「セッションの最終アクセス日時」の列があるのかな? >>141 ふつうはサーバでクーロン動かして定期的に掃除してやる。 >>142 そっかー。 いまつくってるところ、クーロン使えないんですよね・・・ なら、そのユーザがまたログインしてきたときに、 削除(というか新しいセッションIDに書き換える) でも、問題とくにないですよね? ($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 という文字列になってしまいます。 なぜなんでしょうか >>143 ユーザが再度ログインしたら、前回のそのユーザのセッション ファイルだけ削除する必要はない。ログインしたらすべての セッションファイルをチェックして、時間切れになるものをすべて 削除すればOK。 ASP VBScriptでsession変数を使ってセッション管理しようおおもうのですが、 ブラウザがわでクッキー無効にされてる場合ってセッション管理できなくなってしまうのでしょうか?その場合はURLにうめこむとか、HiddenでPOSTするとかで対処するしかないのでしょうか? $sessionid = crypt($year.$mon.$mday.$hour.$min.$sec.$$, "AA"); print $sessionid; ・・と、セッションIDを生成してるのですが、 リロードを何度やっても同じ文字列になってしまい、 わけわからん状態です。。。 どうしてなのでしょうか? crypt って、先頭の何文字かしかみてなかったと思う。 >>148 なーるほど。 調べたら、先頭8文字しか見てないようです DES(無印) = 8文字 MD5($1$) = 255文字(?) BlowFish($2$) = ? >>147 セッションを全く理解していないと思われるので、 まずフローチャート描いてみることをお勧めする。 セッション管理しつつ、2重ログイン(複数の人が同じIDでログイン)を禁止 するには、どうすればいいのでしょうか? >154 「あなたは本当に○○さんですか?」というダイアログを出す。 SSL 使えないならマジこれしかない。 あ、すいません、訂正 2重ログイン(複数の人が同じIDでログイン) ↓ 2重ログイン(複数の人が同じIDで、同時に、ログイン) >>154 んん? どんなセッション管理の方法を使ってるのかわからんが……。 普通はそんな状況にはならんのではないのか? IDとセッションを対で運用してる? 一つのIDには一つまでのセッションしかないようにすれば、解決しないか? >>157 設計しだいだな。ログイン時の IP アドレスを記録しておいて、 同一 ID に対する最終ログイン IP アドレスしか受け付けないように するしかないか。 A → ログイン (成功) A → ページ要求 (成功) B → ログイン (成功) A → ページ要求 (失敗) B → ページ要求 (成功) これは IP アドレスを個人特定のキーに使っているが、ID に対する 初回ログイン時に Cookie を発行して、ID と Cookie を検証するとか そういう方法しかない。まぁこの話を聞いてピンとこなきゃあきらめれ。 Javaを使っている場合、JMSを使ってみるとか。Sessionオブジェクトを一定期間DBなんかに永続化して ログイン時に同じオブジェクトが永続化されていればログイン中などの判定を下す… 色々な判定基準があるだろうけど。ちょっと実装が難しいかな。 >>158 ほんとだ。普通にクッキーと、セッションマスタ.csvをつくってたら、 自然と解決してた。 あのー、(トップ含めて)すべてのページをcgi'perl)にして、 セッション管理してたら、共用サーバだと追い出されます? >>163 そうなんだ。。。 てっきり、「当たり前だろ」みたいなレスがくるかなと思ってた。 ∧∧ ミ _ ドスッ ( ,,)┌─┴┴─┐ / つ.;ダブダブ-│ 〜′ /´ └─┬┬─┘ ∪ ∪ ││ _ε3 ゛゛'゛'゛ おかずなら過激に http://www.dvd01.hamstar.jp read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる