1read 100read
2012年5月WebProg45: 【PHP】セッションについて語ろう!【PHP】 (819) TOP カテ一覧 スレ一覧 2ch元 削除依頼
オッフェ(=゚ω゚)ノ♪で1000目指すスレ in WebProg (729)
【読み方】Open Laszlo スレ【わからん】 (181)
さまざまな言語仕様について熱く語る闘技場 (197)
【Python】Webフレームワーク Djangoスレ Part2 (131)
PHPでPDF (170)
よくあるプログラムミス (172)

【PHP】セッションについて語ろう!【PHP】


1 :03/09/24 〜 最終レス :12/05/20
ブラウザを閉じたらセッションの効果がなくなるのって、
ブラウザを閉じることでクッキーを消しているからなのですね。。
知らなかったよーーーーうわーーーん

2 :
いちいちセッションの機能使わなくてもよく考えたら、
IPをキーにして
普通につくれるじゃん。。
と思ったんんだけどどうう?

3 :

1、スレ建て宣言…………1
2、開会の辞………………1
3、煽 り………………住人有志
4、逝ってよし……………1
5、御前もな………………住人有志
6、決意表明………………1
7、祝電披露………………1の家臣
8、来賓挨拶………………1の母親
9、来賓挨拶………………1の主治医
10、余興……………………もな踊り保存会
11、余興……………………1騙り太夫
12、送辞……………………大検
13、答辞……………………1
14、板歌斉唱………………全員
15、閉会の辞………………スレッドストッパー
16、終了宣言………………ひろゆき(削除忍代読)

4 :
早くPHP5出ないかなぁ・・・。

5 :
>>2
世の中の全端末にグローバルIPアドレスを付与出来るようになったのなら、それでも良いんだろうけどな。
NATやNAPT、プロキシサーバなんてもんが存在してしまうわけだ。

6 :
>>5
それって何か問題ある?

7 :
完全ではない、という問題。

8 :
IPが変わる可能性がある、ということだよね。
変わらなければ問題はない。
けれども変わるから完全ではない。
でも用途によれば、問題なく利用できるよね。
使う目的によって、価値も変わってくるということだ。

9 :
あげ

10 :
セッションだけで1000まで逝くか?

11 :
実際、、どうやったら、セッションの代わりになるんですか?
誰かおしえてちょんまげ

12 :
IPが変わるとか、ブラウザの起動中だけとか言ってるけど
問題はその逆。
同じアドレスで複数の人がアクセスする可能性
同じクライアントで別人がアクセスする可能性
これがあるから、そのままでは使えない

13 :
っていうかIPをキーにするんじゃなくて、クッキーをキーにしたら、
セッションと同じ機能をまるごとつくれるんじゃないか?

14 :
>>12
同じクライアントで別人がアクセスする可能性
セッションでもそれが言える罠。

15 :
なんだこのレベルの低さは

16 :
>>14
いやだから、ログアウトやブラウザ閉じたら無効にする機能が必要

17 :
>>16
クッキーの有効期限を0にしたら同じじゃないの?

18 :
イイヨーイイヨーあげ

19 :
今どきクッキーでセッション管理してモナー

20 :
>>8
アホか。

21 :
オマエラなぁー、せめて↓くらいひととおり見ろよ、とりあえず。
PHP マニュアル:セッション処理関数(session)
http://php.planetmirror.com/manual/ja/ref.session.php
クッキー仕様書日本語訳
http://www.futomi.com/lecture/cookie/specification.html

22 :
「ブラウザの戻るボタンで戻ってリロード→2重処理」
の回避策にsession使ってるけど邪道?

23 :
>>22
素直にDBの主キーと比較するとかもあると思うけど、それほど邪道でもないかと。
複数ページでのつながりを確保するのが目的だからな。

24 :
>>22
sessionでチェックという以前に、
遷移先画面にリダイレクトさせて、戻れなくするのが基本じゃないのかなぁ??

25 :
http://www.leverage.jp/bloom/qry/search.qry?function=first

26 :
>>24
エラーが出たとき入力内容が一切合切消えるのは非常に迷惑。

27 :
>>26
言ってる意味がよくわからん
それって、クライアント側のバッファ利用の問題で、二重投稿処理とは関係ない

28 :
戻れなくして不便を強いられるより、そういう配慮をしてくれる
ところのほうが好感が持てますね

29 :
age

30 :
php

31 :
sesson

32 :
Yahooのサイトでは、クッキーを使ったセッションで認証をやってて、クッキーが分かっても設定されてるクッキーが
Yahooドメインかどうかを判断して不正ができないようにしているみたいですが、これってクラックの危険性はありますか?
大丈夫そうだったらウチのサイトでも導入しようかと考えてます。

33 :
危険が無いわけじゃないが、あちこちで使われている手法だし
対策はされている。

34 :
session_startってやらないと、$_SESSって呼び出せないの?

35 :
>>34
php.ini

36 :
レベルの低さからしてネタスレか?

37 :
>>36
>>2から10個ぐらいの書き込み見ると、完全にネタスレだと思ったけど、
その後、ベタっぽい低空飛行で展開されているようなので、俺も判断に苦
しんでる。

38 :
>>22,26,28,33
などは、典型だが、良い子は、まねしないでね。晒し上げ。

39 :
根拠を書かない>>38を晒しあげ

40 :
phpマニュアルのセッション関数(セキュリティ部分)を抜粋してみたYO。
------------------------------------------------------------------------------
セッションとセキュリティ
外部リンク: Session fixation
セッションモジュールは、セッションに保存した情報を見ることができるのが
そのセッションを作成したユーザーだけであることを保証することができません。
セッションの完全性を積極的に守るには、そのセッションに 紐づく値に応じた追加措置が必要です。
セッションに運ばれるデータの重要性を評価し、必要な保護策を講じて下さい。
これには通常、お金があかり、ユーザの利便性を損なうことになります。例えば、簡単な
社会工学的な策略からユーザを守るためには、 session.use_only_cookiesを有効にして下さい。
この場合、ユーザ側でクッキーは無条件に有効となっている必要があり ます。そうでない場合、
セッションは動作しません。
存在するセッションIDが第三者に洩れる手順は何種類かあります。
洩れたセッションIDにより、第三者が特定のIDに関連する全てのリソースにアクセスできるように
なります。まず、セッションIDがURLにより伝 送される場合です。外部サイトにリンクを張っている場合、
外部サイト のreferrerログにセッションIDを含むURLが保存される可能性があります。
第二に、よりアクティブな攻撃者がネットワークのトラフィックをモニターしている可能性があります。
セッションIDが暗号化されていない場合、セッションIDはネットワーク上を平文テキストで伝送されます。
解決策はサーバ上にSSLを実装し、確実にユーザに適用することです。
-------------------------------------------------------------------------------

41 :
>>40
で?
そんな分かりきった事をのっけて何が言いたいの??

42 :
>>41
初心者には分かりきったことではないんでしょう。
なぜつっかかるのかわからん。

43 :
>>42何が言いたいかわからん、ということを言いたいのじゃないのか?>>41

44 :
貧弱なセッション管理について
ttp://www.atmarkit.co.jp/fsecurity/rensai/webhole03/webhole01.html
・セッションハイジャック
・Session Fixation攻撃

45 :
>>39
キャッシュを public にすると、そのままブラウザ閉じても、そのURLを開けばまた
情報が出てくるからじゃないの?

46 :
キャッシュの話と>>28は関係ない
>>28は戻るボタンを用意して、内容を復元する配慮をしてくれと
言ってるので、ブラウザの戻るでのキャッシュを使えとは言ってない

47 :
>>33もあれだな。
クラックの危険があるから通常は対策していると言ってるので
指摘される理由がわからんな

48 :
セッションが使えるケータイってありますか?
ちなみに、J-PHONE J-SH05ではダメみたいです。

49 :
>>48
セッションの仕組み一度自分で作ってみたらどう?と思ったよ

50 :
session_set_save_handler()でDB(MySQL)にセッション情報を保存して管理する処理を
書いて普通にうまくいってたのですが、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です。

51 :
訂正:session_switchingの2行目
if (!session_destroy()) {
 ↓
if (session_destroy()) {

52 :
生きてるか?w

53 :
ハイ

54 :
アゲ
実際の所さCOOKIE無効のクライアントでも同一か認識できるから
俺はCOOKIEへの保存をセッションに保存してるわけだが
邪 道 か な ?

55 :
良いんでない? 俺もそうするときがあるよ。

56 :
セッション使ったプログラムかいてたんだけどさ、
使い方があまりにも簡単すぎて($_SESSIONとクッキー使った場合)
こっちは身構えてるので、逆に解説とかがわかりにくかった(藁

57 :
>>56
確かにセッション使うのは楽だけど、
動作原理はしっかり理解する必要があるよ。

58 :
>>57
様々な解説書サイトなどはそういう意図で、原理を説明されてるんだとは思います。
なんか、「どう使うか!!!」がなかなかわからなかったんですよ(藁

59 :
オイラも初めてセッションを使い始めた時は、>>58と同じような感じだったなぁ。
セッションが機能するのに何ページ必要かとか悩んだ悩んだ。
a.html フォーム
 |
b.php session_start(); $_SESSION['data']='a';
 |
c.php sessin_start(); $data = $_SESSION['data'];

60 :
同じく。実際やってみて思っていたより激しく簡単だったので
自分がやってることが、全然見当外れなのではないかと思ったりも。
もしかしたら、そうなのかもしれない。
一応自分の思ったとおりに動作しているし、人にチェックしてもらっても
ちゃんと動作していると彼は言う…。
>>57
使い方だけで、まだ原理とかあやふやなので
ちゃんと勉強してみようと思います。

61 :
>>54
どうやってクライアントを認識しているのか教えてほしいage

62 :
以前作ったショッピングサイト(注文数50件強/日※PHPではない)はクッキーでセッション管理してるけど、
カートに商品が入らないという問い合わせが、頻繁ではないがどうしても尽きない。
結局、クライアント側の設定に依存するし、やはり客に色々設定を強いるのはどうかと思う。
次やるとしたらamazonのようにURLに渡して管理したいけど、カート以前のページは
よほど商品数が多くない限り、一般的に静的に作りますよね?
そこで、URLでセッション管理したいがために、静的HTMLで済むものを、全部PHPで動的に
出力するのは馬鹿げた考えでしょうか?

63 :
>>62
いいんじゃない?
URLにセッションIDとか渡すのって普通だと思う。

64 :
俺はPHPじゃなくてJSPだが、静的ページも全部JSPだよ(商用)。
PHPでも同じようなことしてるひといるでしょう。

65 :
$_SESSION['msgs'] .= htmlspecialchars($_POST['msg'])
とすると、<input name="msg">に入力された文字列が
/tmpのセッションファイルに書き込まれると思いますが、
保存されるときの文字コードはブラウザから送られてくる
文字コードのままなんでしょうか?
1行目の方法で保存したものを、echo $_SESSION['msgs'];
で出力しても日本語部分が表示されません。
よろしくお願いします。
ブラウザはIEで、サーバー側はこうなってます。
mbstring.internal_encoding = EUC-JP
mbstring.http_output = SJIS
/tmpにある今回のセッションファイル : SJIS

66 :
こんにちは、PHP、Apacheという構成でi modeでセッション管理を行うことは可能なのでしょうか、可能であるとすればphp.iniやhttpd.conf等の設定部分や、またPHPスクリプトに特に留意するポイント等あれば教えて下さい。

67 :
できるけどGETでのセッション管理なんで認証とかにはつかっちゃ駄目

68 :
>>62
Amazonのように作るならOKじゃないの。
あれのカートは「誰の」という情報とは結びつかないようにしてあって、
会計の段階で「誰の」に結びつけるようにしてる。
# cookieが使える場合には、名無しさんAのカートのように、名無しさんも
# 区別して結びつけるけど。cookieに保存したセッションIDを使って。
その辺の個人情報や決済部分と切り離して設計できてれば
カート情報なんて商品リストの中から商品を選んだだけの存在だからね。

69 :
>>68cookieなしで amazon 使えるの?

70 :
>>69
普通に使えますよ、カート機能自体はSIDがURLに付加されてますし。
cookieが使える場合はその他の機能がプラスされたり、
カート機能の照合補正が行われたり。結構上手く出来てると思います。
気にならない(気づかない)というところも上手いところ。

71 :
session_startした後にPOSTしたページに
戻るボタンで戻ったら有効期限切れってなるのは
どう言う解決法があるのですか?

72 :
ホシュホシュ

73 :
おそレスですけど、
昔から、通販業者系はサーバサイドのセッション管理が標準だね。

74 :
セッションですか?!
私にお任せあれ!!!!!

75 :
>>71
session.cookie_lifetime integer
session.cookie_lifetimeは、ブラウザに送信す るクッキーの有効期間を秒単位で指定します。値0は、"ブラウザを閉じ るまで"を意味します。デフォルトは、0です。 session_get_cookie_params()および session_set_cookie_params()も参照して下さい。

76 :
ブラウザを閉じても1時間は有効であるように、
ini_set( 'session.cookie_lifetime' ,’3600’ );と記述しました。
書き方がおかしいでしょうか?
この書き方では、設定変更は出来ないようです。
Local Valueは3600に変わるのですが、Master Valueは0になっております。
Master Valueも3600には変わらないのでしょうか?
ini_setを使えばソースから書きかえられると思うのですが。

77 :
>>76
こっちのスレの方が相応しいけど、マルチポストいくないっ

78 :
>>77
一言添えればよかったですね。
ちょっとこちらで質問させてください。

79 :
>>78
76の内容については向こうで既にレスが付いているが?
Local Valueではなく、Master Valueでないと駄目という理由が判らん。
値の優先度はLocal(高)、Master(低)。ディレクトリごと指定したいのなら、
Apacheの場合だと.htaccessを利用すれば良かろ

80 :
ini_set( 'session.cookie_lifetime' ,’3600’ );と
記述して、セッションIDが追加されなくはなります。
しかし、// ini_set( 'session.cookie_lifetime' ,’3600’ );と
記述して設定をやめて、アップしても
セッションIDが作られないんです。

81 :
鯖を数日動かしてると、
セッションが不安定にならない?
漏れの鯖は三日くらいでセッションがプチプチ切れるようになる。
apacheを再起動すると治るけど、
コレってPHPの設定がおかしいからかな?

82 :
>>81
PHP のバージョンと OS は何?
Linux で PHP 4.2.x を使っていた頃に同じ状態で苦労したことがあるけど。
Apache の error.log に Segmentation Fault とかのログが残ってる?

83 :
>>82
child pid ***** exit signal Segmentation Fault
ログにはこんなもんがいくつか残ってました
OSはRedhatLinuxでapache1.3.27、PHP4.3.2です
なんか分かりますか?

84 :
>>83
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 が出そうだけど。
まあ、クリティカルなシステムをバージョンアップするなら、
十分にテストしてからにした方がいいと思う。

85 :
>>84
どうもです
ああ、やっぱバージョンのせいなんですかね
セッション機能にはmmを利用しているんですが、
どうせ処理速度には大差がないだろうし、filesを検討します
そのうちPHP5が出てきそうですが、
焦って飛びつくのは危険そうですね

86 :
>>85
PHP 4.2.x の頃に、パフォーマンス的に有利ということだったので、
session.save_handler = mm
にしていたことがあったけど、>>81 とほぼ同じ症状になった。
原因が分からず、随分悩んだ後、files に戻したところ、安定するようになった。
PHP 4.3.0 以降では確認していなかったけど、修正はされていないのかな。

87 :
いまfiles指定して動かしてみたところ、
特に処理速度にも問題ないし、とりあえず大丈夫
まあ今後>>81の症状がでるかどうかまだ分かりませんが・・・
でもコレはPHP4.3.2の問題じゃないかもしれませんね
apacheもlogrotateの時にサービスが落ちたりしますから
今じゃ毎朝cronでapacheを再起動してます(苦笑)

88 :
自分で書いてて思ったんですが、
apacheがちょくちょく落ちるのってかなりやばいよなあ(汗)
OSのレベルからアップグレードを考えるいい機会かもしれない

89 :
>>87
その状態だと、PHP の方が問題の可能性が高いと思う。
当時は、3日から 1週間にに一度再起動していたし、
apachectl で restart すると Apache が落ちてしまって、
apachectl start しないと起動しない状態になっていたので。
files に変更してからは、Apache が落ちることもなくなったので、
同じ問題だとすると、安定するかもしれないので、しばらく様子を
見てもいいかもしれない。
セキュリティ問題のこともあるので、簡単にバージョンアップできる
のであれば、バージョンアップした方がいいと思うけど。

90 :
>>86
mm ってなんですか?
当方セッション情報を MySQL に入れるハンドら作って動かそうとしているのですが、
既存のがあるんなら使っちゃおっかな〜

91 :
>>90
maji mukatsuku

92 :
>>90
セッションの保存用の共有メモリ。
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 を起動。

93 :
おぉ!phpに既に用意されてるのね。さんきゅー
どれどれ・・ふむふむ・・
なーんだ、mmってモジュールの名前なのね・・
こっちか・・ http://www.ossp.org/pkg/lib/mm/
UNIXで動くのね・・どれどれ
#whereis mm
mm: /usr/ports/devel/mm
をを、Portsに入ってるジャン
んでも、こいつの動作検証せなあかんのか〜めんどくさっ
以上5分で却下しますた。ごめん。

94 :

こんなんが出てくるんですけど・・・
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ドライブに作りますたがダメです。
なんででしょうか?

95 :
>>94
すんません!いきなり判明しました・・・
1行目を空白にしていたのが原因でした。
1:    ←空白行にしていた
2:<?
3:session_start();
4:$_SESSION['register'] = 0;
5:
6:?>
1:<?
2:session_start();
3:$_SESSION['register'] = 0;
4:
5:?>
にしただけで治りました・・・
お騒がせしてすんません。

96 :
IE6でクッキー機能をOFFにしているのにセッションが使えてしまう。
PHPのSIDもOFFにしているのに・・・
なぜ?
・・・と書き込もうとしたら2chに書き込めないw
なぜ掲示板でクッキー必須なんだ?

97 :
>>96
見逃してるだけだよ。
セッションが使えているなら、cookieかURIパラメータの中に必ず埋め込まれている。

98 :
>>96
勘違いしてるだけだな。

99 :
>>96
コンテンツの中に埋め込む場合もあるけどね。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
【読み方】Open Laszlo スレ【わからん】 (181)
不正アクセスUPを防ぐには (106)
OpenPNE その6 (448)
ワンストップ認証【OpenID,SAML,Live ID, BBAuth】 (137)
【RoR】Ruby on Rails Part14 (586)
=== IIS === (288)
--log9.info------------------
大学で急にアメフトやる奴って (866)
アメフトXリーグ2部,3部,4部スレ (849)
JPFFについて語ろう (141)
【NFL】アトランタファルコンズ【NFC】 (827)
【NFL】グッズとかどこで買ってるの?【SHOP】 (100)
【America's】☆DallasCowboys☆ 3Stars【Team】 (682)
Washington Redskins 応援スレ (685)
【NFL】アリゾナ・カーディナルスPart3【NFC/WEST】 (554)
NFL Japanを語る (358)
【3C】専修大学 GREEN MACHINE vol.1 (466)
アメフト好きになったきっかけを語って下さい (485)
【裏の顔】大学アメフト部 【華やかな表顔】 (690)
【NFC West】ST. Rams【羊】 (415)
【AFC】-NY JETS 応援スレ-Part2【East】 (327)
【近藤】アメフト実況・解説者スレWEEK5【有馬】 (626)
【AFC】 Cleveland Browns 【わんこ】 (267)
--log55.com------------------
プロ野球史上唯一の記録・人物
あの年とこの年は似ていた
【何が】横浜・大洋のAクラス【良かったのか】
思い出に残る開幕試合
1997年のプロ野球 Part.2
■同日の大きな出来事により 霞んでしまった出来事 Part.2
なせ王貞治は現役時代、江川卓をイジメたのか?
1998年のロッテの18連敗