【PHP】セッションについて語ろう!【PHP】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/09/24 19:31ID:SnRvXmpIブラウザを閉じることでクッキーを消しているからなのですね。。
知らなかったよーーーーうわーーーん
0042nobodyさん
03/10/11 10:46ID:f+KUGOmH初心者には分かりきったことではないんでしょう。
なぜつっかかるのかわからん。
0044参考
03/10/12 02:38ID:hB6ZK8LUttp://www.atmarkit.co.jp/fsecurity/rensai/webhole03/webhole01.html
・セッションハイジャック
・Session Fixation攻撃
0045nobodyさん
03/10/12 02:43ID:hB6ZK8LUキャッシュを public にすると、そのままブラウザ閉じても、そのURLを開けばまた
情報が出てくるからじゃないの?
0046nobodyさん
03/10/12 02:47ID:???>>28は戻るボタンを用意して、内容を復元する配慮をしてくれと
言ってるので、ブラウザの戻るでのキャッシュを使えとは言ってない
0048nobodyさん
03/10/12 03:08ID:mzy4uQ15ちなみに、J-PHONE J-SH05ではダメみたいです。
0049nobodyさん
03/10/12 03:14ID:hB6ZK8LUセッションの仕組み一度自分で作ってみたらどう?と思ったよ
0050nobodyさん
03/10/14 21:07ID:/RUyf6Fs書いて普通にうまくいってたのですが、idを毎回変えたくて
ttp://www.asahi-net.or.jp/~wv7y-kmr/note/2003-09.html#YMD20030907_PHP
を参考に、疑似 session_regenerate_id()を作りました。
function session_switching() {
$qq = serialize($HTTP_SESSION_VARS);
if (!session_destroy()) {
session_id(md5(uniqid(rand(), 1)));
session_start();
$HTTP_SESSION_VARS = unserialize($qq);
return true;
} else {
return false;
}
}
んで、
session_start();
$noerr = session_switching();
ってやってみたんですが、関数の中のsession_start()で
「Fatal error: Failed to initialize session module」が出てしまいます。
destroy()したあとすぐにstart()するときに何か特別に注意することってあるんですか?
DB関連とsession_set_save_handlerはここをヒントにしました。
http://itbtech.itboost.co.jp/php/php_12.php
DBじゃなく、普通のファイル管理ではうまく動きました。
環境は、RedHat8.0, PHP-4.2.2, MySQL-3.23.56です。
0051nobodyさん
03/10/14 21:11ID:/RUyf6Fsif (!session_destroy()) {
↓
if (session_destroy()) {
0052nobodyさん
03/11/13 18:52ID:???0053nobodyさん
03/11/19 18:30ID:???0054nobodyさん
04/01/08 05:26ID:K/SrUI+S実際の所さCOOKIE無効のクライアントでも同一か認識できるから
俺はCOOKIEへの保存をセッションに保存してるわけだが
邪 道 か な ?
0055nobodyさん
04/01/09 19:32ID:???0056ななしくん
04/01/27 22:58ID:vdgC7W+O使い方があまりにも簡単すぎて($_SESSIONとクッキー使った場合)
こっちは身構えてるので、逆に解説とかがわかりにくかった(藁
0057nobodyさん
04/01/28 03:07ID:IiAYAwD1確かにセッション使うのは楽だけど、
動作原理はしっかり理解する必要があるよ。
0058ななしくん
04/01/28 06:10ID:???様々な解説書サイトなどはそういう意図で、原理を説明されてるんだとは思います。
なんか、「どう使うか!!!」がなかなかわからなかったんですよ(藁
0059nobodyさん
04/01/28 08:42ID:???セッションが機能するのに何ページ必要かとか悩んだ悩んだ。
a.html フォーム
|
b.php session_start(); $_SESSION['data']='a';
|
c.php sessin_start(); $data = $_SESSION['data'];
0060nobodyさん
04/01/29 07:51ID:???自分がやってることが、全然見当外れなのではないかと思ったりも。
もしかしたら、そうなのかもしれない。
一応自分の思ったとおりに動作しているし、人にチェックしてもらっても
ちゃんと動作していると彼は言う…。
>>57
使い方だけで、まだ原理とかあやふやなので
ちゃんと勉強してみようと思います。
0061nobodyさん
04/02/01 18:12ID:LMIdhuo4どうやってクライアントを認識しているのか教えてほしいage
0062nobodyさん
04/02/12 11:51ID:acZilhbSカートに商品が入らないという問い合わせが、頻繁ではないがどうしても尽きない。
結局、クライアント側の設定に依存するし、やはり客に色々設定を強いるのはどうかと思う。
次やるとしたらamazonのようにURLに渡して管理したいけど、カート以前のページは
よほど商品数が多くない限り、一般的に静的に作りますよね?
そこで、URLでセッション管理したいがために、静的HTMLで済むものを、全部PHPで動的に
出力するのは馬鹿げた考えでしょうか?
0064nobodyさん
04/02/14 08:52ID:???PHPでも同じようなことしてるひといるでしょう。
0065nobodyさん
04/02/14 17:19ID:X1Wwd0H+とすると、<input name="msg">に入力された文字列が
/tmpのセッションファイルに書き込まれると思いますが、
保存されるときの文字コードはブラウザから送られてくる
文字コードのままなんでしょうか?
1行目の方法で保存したものを、echo $_SESSION['msgs'];
で出力しても日本語部分が表示されません。
よろしくお願いします。
ブラウザはIEで、サーバー側はこうなってます。
mbstring.internal_encoding = EUC-JP
mbstring.http_output = SJIS
/tmpにある今回のセッションファイル : SJIS
0066nobodyさん
04/02/14 19:01ID:1TD2enu00067nobodyさん
04/02/17 21:52ID:???0068nobodyさん
04/02/18 22:47ID:???Amazonのように作るならOKじゃないの。
あれのカートは「誰の」という情報とは結びつかないようにしてあって、
会計の段階で「誰の」に結びつけるようにしてる。
# cookieが使える場合には、名無しさんAのカートのように、名無しさんも
# 区別して結びつけるけど。cookieに保存したセッションIDを使って。
その辺の個人情報や決済部分と切り離して設計できてれば
カート情報なんて商品リストの中から商品を選んだだけの存在だからね。
007068
04/02/19 23:37ID:???普通に使えますよ、カート機能自体はSIDがURLに付加されてますし。
cookieが使える場合はその他の機能がプラスされたり、
カート機能の照合補正が行われたり。結構上手く出来てると思います。
気にならない(気づかない)というところも上手いところ。
0071nobodyさん
04/03/04 23:25ID:???戻るボタンで戻ったら有効期限切れってなるのは
どう言う解決法があるのですか?
0072nobodyさん
04/03/07 22:46ID:Nzwf/rJi0073nobodyさん
04/03/09 22:32ID:???昔から、通販業者系はサーバサイドのセッション管理が標準だね。
0074nobodyさん
04/03/18 02:35ID:5cjOT2D0私にお任せあれ!!!!!
0075nobodyさん
04/03/18 05:54ID:zQ2yHGPusession.cookie_lifetime integer
session.cookie_lifetimeは、ブラウザに送信す るクッキーの有効期間を秒単位で指定します。値0は、"ブラウザを閉じ るまで"を意味します。デフォルトは、0です。 session_get_cookie_params()および session_set_cookie_params()も参照して下さい。
0076nobodyさん
04/03/18 09:33ID:SVbaZ9qTini_set( 'session.cookie_lifetime' ,’3600’ );と記述しました。
書き方がおかしいでしょうか?
この書き方では、設定変更は出来ないようです。
Local Valueは3600に変わるのですが、Master Valueは0になっております。
Master Valueも3600には変わらないのでしょうか?
ini_setを使えばソースから書きかえられると思うのですが。
0078nobodyさん
04/03/18 10:53ID:SVbaZ9qT一言添えればよかったですね。
ちょっとこちらで質問させてください。
0079nobodyさん
04/03/18 12:14ID:???76の内容については向こうで既にレスが付いているが?
Local Valueではなく、Master Valueでないと駄目という理由が判らん。
値の優先度はLocal(高)、Master(低)。ディレクトリごと指定したいのなら、
Apacheの場合だと.htaccessを利用すれば良かろ
0080nobodyさん
04/03/18 14:49ID:SVbaZ9qT記述して、セッションIDが追加されなくはなります。
しかし、// ini_set( 'session.cookie_lifetime' ,’3600’ );と
記述して設定をやめて、アップしても
セッションIDが作られないんです。
0081nobodyさん
04/03/19 15:09ID:???セッションが不安定にならない?
漏れの鯖は三日くらいでセッションがプチプチ切れるようになる。
apacheを再起動すると治るけど、
コレってPHPの設定がおかしいからかな?
0082nobodyさん
04/03/19 17:48ID:???PHP のバージョンと OS は何?
Linux で PHP 4.2.x を使っていた頃に同じ状態で苦労したことがあるけど。
Apache の error.log に Segmentation Fault とかのログが残ってる?
0083nobodyさん
04/03/19 22:04ID:???child pid ***** exit signal Segmentation Fault
ログにはこんなもんがいくつか残ってました
OSはRedhatLinuxでapache1.3.27、PHP4.3.2です
なんか分かりますか?
008482
04/03/20 00:30ID:???php.ini のセッションの設定で、
session.save_handler
に files 以外を指定している場合は安定しないかもしれない。
でも、PHP 4.3.2 だと、
bug #24592 (NULL related crash in session extension)
bug #22154 (Possible crash when memory_limit is reached and output buffering in addition to session.use_trans_sid is used)
の可能性の方が高そう。PHP 4.3.3 で修正されているみたいなので
バージョンアップしたらセッション周りは安定するかもしれない。
今なら、PHP 4.3.4 かな。もうすぐ PHP 4.3.5 が出そうだけど。
まあ、クリティカルなシステムをバージョンアップするなら、
十分にテストしてからにした方がいいと思う。
0085nobodyさん
04/03/20 10:00ID:???どうもです
ああ、やっぱバージョンのせいなんですかね
セッション機能にはmmを利用しているんですが、
どうせ処理速度には大差がないだろうし、filesを検討します
そのうちPHP5が出てきそうですが、
焦って飛びつくのは危険そうですね
008684
04/03/20 10:55ID:???PHP 4.2.x の頃に、パフォーマンス的に有利ということだったので、
session.save_handler = mm
にしていたことがあったけど、>>81 とほぼ同じ症状になった。
原因が分からず、随分悩んだ後、files に戻したところ、安定するようになった。
PHP 4.3.0 以降では確認していなかったけど、修正はされていないのかな。
0087nobodyさん
04/03/20 12:40ID:???特に処理速度にも問題ないし、とりあえず大丈夫
まあ今後>>81の症状がでるかどうかまだ分かりませんが・・・
でもコレはPHP4.3.2の問題じゃないかもしれませんね
apacheもlogrotateの時にサービスが落ちたりしますから
今じゃ毎朝cronでapacheを再起動してます(苦笑)
008887
04/03/20 13:11ID:???apacheがちょくちょく落ちるのってかなりやばいよなあ(汗)
OSのレベルからアップグレードを考えるいい機会かもしれない
008986
04/03/20 13:35ID:???その状態だと、PHP の方が問題の可能性が高いと思う。
当時は、3日から 1週間にに一度再起動していたし、
apachectl で restart すると Apache が落ちてしまって、
apachectl start しないと起動しない状態になっていたので。
files に変更してからは、Apache が落ちることもなくなったので、
同じ問題だとすると、安定するかもしれないので、しばらく様子を
見てもいいかもしれない。
セキュリティ問題のこともあるので、簡単にバージョンアップできる
のであれば、バージョンアップした方がいいと思うけど。
0090nobodyさん
04/03/20 15:55ID:???mm ってなんですか?
当方セッション情報を MySQL に入れるハンドら作って動かそうとしているのですが、
既存のがあるんなら使っちゃおっかな〜
009286
04/03/20 20:56ID:???セッションの保存用の共有メモリ。
ttp://jp.php.net/session
mm を使うと不安定になるという話をしていたのだが、PHP の最新版では
修正されている可能性もあるので使いたいのならどうぞ。
mm をインストール(既にインストールされている Linux ディストリビューションもある)して、
ttp://www.ossp.org/pkg/lib/mm/
PHP の configure で --with-mm を指定してコンパイルする。
php.ini で
session.save_handler = mm
に変更して Apache を起動。
009390
04/03/21 03:27ID:???どれどれ・・ふむふむ・・
なーんだ、mmってモジュールの名前なのね・・
こっちか・・ http://www.ossp.org/pkg/lib/mm/
UNIXで動くのね・・どれどれ
#whereis mm
mm: /usr/ports/devel/mm
をを、Portsに入ってるジャン
んでも、こいつの動作検証せなあかんのか〜めんどくさっ
以上5分で却下しますた。ごめん。
0094nobodyさん
04/04/02 20:40ID:???こんなんが出てくるんですけど・・・
Warning: session_start(): Cannot send session cookie - headers already sent by
(output started at c:\program files\apache group\apache\htdocs\session\
session_test_1.php:2) in c:\program files\apache group\apache\htdocs\session\
session_test_1.php on line 3
session();の行でエラーなんだそうです。
/tmpのフォルダもCドライブに作りますたがダメです。
なんででしょうか?
0095nobodyさん
04/04/02 20:46ID:???すんません!いきなり判明しました・・・
1行目を空白にしていたのが原因でした。
1: ←空白行にしていた
2:<?
3:session_start();
4:$_SESSION['register'] = 0;
5:
6:?>
1:<?
2:session_start();
3:$_SESSION['register'] = 0;
4:
5:?>
にしただけで治りました・・・
お騒がせしてすんません。
0096nobodyさん
04/04/04 21:49ID:zccZUASsPHPのSIDもOFFにしているのに・・・
なぜ?
・・・と書き込もうとしたら2chに書き込めないw
なぜ掲示板でクッキー必須なんだ?
010090
04/04/05 01:55ID:???010196
04/04/05 23:36ID:EigS3bMU<?php
echo $_SESSION["name"];
?>
とかでセッション情報をページに表示させるようにしてるから
URIパラメータもないし・・・
クッキーがコッソリ動いてるのか?とも思ったが、
2chに書き込みが出来なかったので、それも考えにくい・・・
自分のサイトだけクッキーが有効になってたのか?分からん・・・
0102nobodyさん
04/04/05 23:45ID:???IEでプライバシーポリシーうんにゃらで2chからのクッキー食べてくれないとか・・
0103nobodyさん
04/04/05 23:55ID:???010496
04/04/05 23:57ID:EigS3bMU「すべてのCookieをブロック」にしたのよ
ふつうコレでCookie機能は無効になるっしょ?
010596
04/04/05 23:58ID:EigS3bMUwww
0106nobodyさん
04/04/06 00:01ID:lpi6f7xmなんやねんな
0108nobodyさん
04/04/06 02:28ID:???んでも、Mozilla使った方が開発はしやすいぽ
0109107
04/04/06 05:26ID:???ちゃうちゃう。
最終的なユーザのことを考えた場合のチェックとしてはIEは外せないけど、
デバッグには向かないから使うなってこと。JavaScript系は特にデバッグしにくい。
但しJavaScriptの挙動はIEとMozillaは違うので、そこは留意しないと駄目。
XMLのチェックの部分では、IEの方が出来がいいと思う。
0110107
04/04/08 00:30ID:???XMLはIEの方が良い!
Mozillaのデバックコンソールってもう一声どうにかならんかなぁ
あとあと、CSSで幅の定義を1どっとずれて描画するのもどーにかならんかなぁ
はうっ!セッション関係無いし
0112nobodyさん
04/04/14 12:42ID:???セッションとは、 フラグである・・・
ようやく気が付いた。
0113nobodyさん
04/04/14 14:05ID:vcn3L4Woセッションなんて言うからよく分からないんだよな。
「ページを超えて持ち運ばれるフラグ」って言えば分かり易いね。
0114教えてください・・・
04/05/16 22:13ID:dL8RQ1Kh<環境>
サーバA:192.168.11.1 WinXP-Apache1.3.29+PHP4.3.4
サーバB:192.168.11.2 同上
やりたいことは、
@サーバAのLOGIN.PHPでログイン(=>LOGINFLG=ONを$_SESSIONに設定する)
AサーバBのxxxx.php($_SESSION[LOGINFLG」を見る)にアクセスする
->xxxx.phpが、$_SESSION[LOGINFLG」=ONを見て、PHPの参照許可を出す
という、セッション情報をサーバ間で持ち回るということをしたいんです。
条件として、
・セッションクッキーを使わない。
・Windows上(=mmが使えない)ということで、session.save_handler = filesを使う。
という状況なんですが、どうやれば、セッション情報の共有はできるんでしょうか・・
お教えください。。。
0115nobodyさん
04/05/16 22:43ID:???セッションという機能がどういう風に実現されてるか、
またはどういう風にすれば実現出来るか考えてみれ
PHPのセッション機能は複数サーバ間で持ち越しすることは想定されていない(はず)なので、
書いてるようなことを実現したいなら、自分でセッション周りを作って、
セッション管理用のサーバを一つ用意すればいい。
が、そんなややこしいことするよりも、もっとスマートな解決法があると思うぞ。
根本的なとこから見直した方がいいと思う。
0116nobodyさん
04/05/17 18:19ID:???DBは使わないの?
方法によっては簡単に出来るのに。
0117nobodyさん
04/05/17 23:43ID:???#勘違いっぽいのでsageておこう・・
0118nobodyさん
04/05/19 00:08ID:???0119nobodyさん
04/05/21 09:38ID:???perlでもできるよね。登録パスワードをフォームに混ぜちゃえばいいわけだし。
でもリファラー吐くブラウザだと他のサーバー行ったときにパスワードが入っているとまずいのか??
だから一時的な物を生成するの?
0120nobodyさん
04/05/21 14:11ID:???セッションはサーバーサイドでデータを保持するのが最大の特徴
「クッキーの逆のもの」と考えてもいいかも
クッキーもセッションも「ページを超えて持ち運ばれるフラグ」には違いないが、
そのデータそのものをどちらに保持するかが違う
クッキーはクライアントで保存し、データそのものを含む
だけどセッションの場合にはデータを保持するのはサーバー側で
クライアント側ではデータそのものは保持しない
(代わりにクライアントを識別するためのセッションIDを保持する必要はあるが)
POSTでhidden使って渡すのも、さらにGETでURI渡しするのも、
ページを超えて運ばれるフラグには違いないけど、これらも結局は
クライアント(ブラウザ)でデータを所持しているんだよね
0121nobodyさん
04/05/21 23:41ID:???何かまとまってないぞ(笑)
要するに毎回データそのものをクッキーなりHIDDENフィールドなりで
運ぶという方法と
そうではなく、識別情報だけをクライアントとサーバー間で往復させて、
サーバー側にハッシュテーブルのようなものでデータを預けて置くという方法
の2つがある。
ぶっちゃけそれだけ。
0123nobodyさん
04/06/01 22:09ID:???サーバ側で生成したサーバ側でしか利用しない値は、
わざわざhiddenで引き回したりしない。つか、してはいけない。
セキュリティホールにもなりうるし。
そういう用途のために(サーバ側の) session を利用するという理由もある。
情報の分離(隠蔽)だな。
0124nobodyさん
04/06/02 16:13ID:???$b=array(1,2,3);
$session_a[b]=$b;
として
session_start();
unset($session_a);
しても$session_a[b]が消えてなかったんだが、バグですか?
PHP Version 4.3.3です。
0125nobodyさん
04/06/03 15:13ID:???session_unregisterの注意を読むと、
unsetではフォーカス内の変数のみを消去して、
セッション内の登録は継続されるようだから、
セッションを再開した時にセッション内の登録変数を読み出し直すだけでは?
つまりそのunsetは現在の$session_aを削除するだけで、
$_SESSION['session_a']は削除しないんではないかと。
つーか、
$session_a['b']=$b;
って書くべきだし(typo?)、
session_(un)registerは非推奨
0126nobodyさん
04/08/20 09:10ID:rKFIPCr5バージョンとか微妙なところで制限事項があるのかな?
0127nobodyさん
04/08/20 15:48ID:???0128nobodyさん
04/08/22 18:42ID:TKt9TmhM変数として保持しながらページを作成していくと、javascriptの
history.back()を使用してページを戻るときに「有効期限切れ」と
なってしまいます。
フォーム入力確認で戻る必要があるのですが、どういった方法で
会員制にするのがよいのでしょうか?
0129nobodyさん
04/08/24 16:45ID:mVJd0HpMhistory.backで戻ってセッション切れちゃうのは仕方ないね。
戻り先のページが別ページなら普通にリンク貼ればOKだと思うけど。。
0130nobodyさん
04/08/24 16:52ID:???セッション(゚听)イラネ
0131nobodyさん
04/09/02 15:49ID:???それでカッコイイと思ってんのか?キモイ奴だな。
php使ってんならJS使わなくてもリファラからファイル(スクリプト)名と
必要ならクエリだけ取り出してリンクさせたらセッションも生きたままで
可変式のBACKボタンが生成できるだろ?
もっとも同一ドメイン内での話だけどな。
0132nobodyさん
04/09/03 00:37ID:???亀レスだけど、目から鱗。今日悩んでいたことが氷解した。
解説書に書いてあることが間違ってたよヽ(`Д´)ノ
とにかく、一言言わせてくれ。どうもありがとう。
0133nobodyさん
04/09/03 09:53ID:???セッションハイジャックの危険性は常につきまとうと思うのだが、
PCサイトならばcookieにsidを食わせて、sidの確認が必要なページのみsslで通信すれば
良いと思うが、携帯サイト等でsidをURLに引き連れまわす必要がある場合
全ページsslで通信という形にするしかないと思うのだが、どうしてる?
0134nobodyさん
04/09/03 10:05ID:???セッションに接続元のIPを記録しておいて
if ($_SESSON['ip'] != $_SERVER['REMOTE_ADDR']) {
die 'あぼーん';
}
0135nobodyさん
04/09/03 10:14ID:???携帯サイトでクライアントをIPで判断できないでしょ?
キャリア側のプロキシのIPだらけになるのでは?
PCサイトの場合でもIPでの判断だと、NATの内側のクライアントは一纏めにしちゃうの?
0136nobodyさん
04/09/03 13:24ID:???PCの場合はCookieオンリー前提で書いてました。説明不足すんません。
携帯は端末とプロキシのIPは一対一対応だと思ってたんだけど、もしかして違います?
(IPアドレス自体はセッションごとに変わりますが)
だったらこの方法は使えませんね。う〜ん。
現行の3G携帯(というか、そのサーバー)はFOMAを除いてCookieに対応してますが
シェア最大のドコモがこれでは将来的にも難しいですね・・・。
個人情報など、重要なデータをセッションで使うときは最初から最後までSSLで通信して、
漏れてもあまり困らないデータは普通にセッションを使うしかないのかな。
Amazonなんかはそうなってるみたいですね。
0137nobodyさん
04/09/05 23:33ID:5TcSHTQS0138nobodyさん
04/09/06 14:10ID:???まず前提からして間違ってる。
>PCサイトならばcookieにsidを食わせて、sidの確認が必要なページのみsslで通信すれば
>良いと思うが
良くない、cookie値はglobal変数「$_REQUEST」として常にサーバへ渡っている。
したがって、cookieに設定したセッションIDを必要とする時のみSSL通信下で行っても、
それ以外のページではsidは平文でネットワークを流れる事になる。
0139nobodyさん
04/09/27 20:49:22ID:???0140nobodyさん
04/09/28 01:10:51ID:???0141nobodyさん
04/09/28 17:26:54ID:???■ このスレッドは過去ログ倉庫に格納されています