【PHP】セッションについて語ろう!【PHP】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/09/24 19:31ID:SnRvXmpIブラウザを閉じることでクッキーを消しているからなのですね。。
知らなかったよーーーーうわーーーん
0266nobodyさん@264
05/03/01 22:20:47ID:???と出るのは、$_SESSION['time'] がNULLのままだからでしょうね・・・
php.ini では
session.auto_start = Off
session.use_trans_sid = On
なんですが、他に設定するところなどがあるでしょうか?
0267nobodyさん
05/03/02 12:42:44ID:???php.iniで設定したsession.save_pathに
保存されているかを確認してみましょう。
0268nobodyさん
05/03/02 12:45:20ID:???と書いてあるので、例えばsession.save_path = "C:\tmp"だったら事前に
tmpフォルダを作っておかないといけない。
0269nobodyさん@264
05/03/02 22:07:46ID:???お世話になります。
何故か php.ini で session.save_path = c:\php\sessiondata になってました・・・
(いつの間に???)
いろいろなページを参考にしていじっている内に、こうなってしまった様です。
一応、phpの下にsessiondataを作って動くようになりました。
基本的にはc:\tmpですよね・・・
お手数をお掛けしました。m(_ _)m
0270nobodyさん
05/03/19 13:08:11ID:oXb2sDzY早いの?軽いの?
0271nobodyさん
05/03/19 13:36:06ID:???ユーザが増えたときにファイルだとinodeの制限を受けてエラー発生てのもあり得ますから。
だから大規模サイトならDB以外ありえない。
0273nobodyさん
05/03/19 20:43:56ID:???0274nobodyさん
2005/04/21(木) 22:24:22ID:zxQ/ZLfoそこで、不要になったセッションファイルを削除しようと思います。
で、下記のようにしてみましたが、全然消えません・・・
session_start();
$session_id = session_id();//セッションIDのバックアップ
session_regenerate_id();//セッションID変更
unlink ("c:\\tmp\\sess_".$session_id);//以前のセッションIDのファイルを削除
ちなみに、
unlink("c:\\tmp\\sess_セッション番号の現物")を使うと確かに消えてくれます。
なんなんでしょか?これ?
0276nobodyさん
2005/04/22(金) 15:46:10ID:???0279nobodyさん
2005/06/23(木) 00:30:15ID:???セッション管理を MySQL + PHP で考えていています。
$_SESSION['hoge'] = $hoge;
とかやった直後は、ハンドラで定義した関数が呼び出されて、
指定したテーブルに $hoge の内容をシリアライズしたような
文字列が格納されているのですが、その後に別の画面へ refresh で
遷移させた後、$_SESSION['hoge'] の値を参照すると何も入っていません。
テーブルを確認すると、直前まで入っていた文字列がブランクになっています。
ちなみに、全ての画面の先頭で session_set_save_handler() と
session_start() を行っています。
これが悪いんでしょうか?
0282279
2005/06/23(木) 21:30:07ID:jMq3kGLZこんな感じです。
class SessionHandler {
var $db;
function SessionHandler(&$database) {
$this->db =& $database;
}
function open($save_path, $session_id) {
$connectable = $this->db->connect();
$this->db->close();
return $connectable;
}
function close() {
return true;
}
0283279
2005/06/23(木) 21:30:37ID:jMq3kGLZif (empty($session_id)) {
return "";
}
if (!$this->db->connect()) {
return "";
}
$sesid = $this->db->addQuote($session_id);
$sql = sprintf("SELECT sesdata FROM sessions WHERE sesid=%s", $sesid);
$result = $this->db->doQuery($sql);
if (is_object($result)) {
while ($row = $db->fetchAssoc($result)) {
$sesdata = $row["sesdata"];
}
$this->db->close();
return $sesdata;
}
else {
return "";
}
}
0284279
2005/06/23(木) 21:35:17ID:jMq3kGLZif (empty($session_id)) {
return false;
}
if (!$this->db->connect()) {
return false;
}
$sesid = $this->db->addQuote($session_id);
$sesip = $this->db->addQuote($_SERVER["REMOTE_ADDR"]);
$sesdata = $this->db->addQuote($session_data);
$sql = sprintf("SELECT * FROM sessions WHERE sesid=%s", $sesid);
$result = $this->db->doQuery($sql);
if ($this->db->getRowsNum($result) == 0) {
$sql = sprintf("INSERT INTO sessions (sesid, sesip, sesdata, sesupdated) VALUES (%s, %s, %s, %u)", $sesid, $sesip, $sesdata, time());
}
else {
$sql = sprintf("UPDATE sessions SET sesdata=%s, sesupdated=%u WHERE sesid=%s", $sesdata, time(), $sesid);
}
$is_write = $this->db->doQuery($sql);
$this->db->close();
return $is_write;
}
0285279
2005/06/23(木) 21:36:08ID:jMq3kGLZif (empty($session_id)) {
return false;
}
if (!$this->db->connect()) {
return false;
}
$sesid = $this->db->addQuote($session_id);
$sql = sprintf("DELETE FROM sessions WHERE sesid=%s", $sesid);
$is_delete = $this->db->doQuery($sql);
$this->db->close();
return $is_delete;
}
function gc($expire_sec) {
$expired = time() - intval($expire_sec);
if (!$this->db->connect()) {
return false;
}
$sql = sprintf("DELETE FROM sessions WHERE sesupdated < %u", $expired);
$is_delete = $this->db->doQuery($sql);
$this->db->close();
return $is_delete;
}
}
よろしくお願いします。
0286nobodyさん
2005/06/24(金) 02:44:53ID:???なぜ保存関数が全部クラスにまとめられてるの?
session_set_save_handlerのサンプルでは単なる関数の集まりになってるけど、その辺大丈夫?
あとrefreshして表示されるアドレスのホスト名はおなじだよね?
0287nobodyさん
2005/07/20(水) 06:09:06ID:???0288nobodyさん
2005/07/20(水) 13:11:14ID:SCPYU6yFsession.use_trans_sid
session.use_cookies
0289nobodyさん
2005/07/21(木) 12:17:04ID:wgpYmPTZsession.use_cookies = 1
session.use_trans_sid = 1
クッキーが使えるときはクッキーを使って渡し、
クッキーが使えないときはURLにパラメータを付けて渡す・・・ってことですよね。
ブラウザ側のクッキーは使える設定です。
が、全てURLにパラメータが付いてきます。
ちなみに、
session.use_trans_sid = 0
にするとページが変わる毎に新規にセッションIDが作られ、セッションが保持されていません。
なんなんでしょか?これ。
0290nobodyさん
2005/07/21(木) 14:59:56ID:wgpYmPTZ自己解決しました・・・
php.iniの中のsession.cookie_path =が
session.cookie_path = /tmp
になっていました・・・(何でだろ・・・???著しく不明。
session.cookie_path = /
で問題無く動きました。
0291nobodyさん
2005/07/23(土) 03:28:54ID:???0292nobodyさん
2005/07/25(月) 06:19:23ID:???!?
((((;゚Д゚))))ブルブル
。 。
/ / ポーン!
( Д )
環境はwindowsですか?
Linuxならある意味凄いと思う。
0293nobodyさん
2005/08/16(火) 14:15:34ID:OHYrGECG実はセッションファイルの置き場をtmpfsで作ろうと思います。
しかしながら、単純にtmpfsで/tmpを作って重ねてしまうと、既に入っている各種のファイルを使えなくなるため鯖の動作がおかしくなります。
んで、Apache+phpのセッションファイル専用に/tmp2を作ろうと思います。
が、php.iniのsession.save_pathを/tmp2にして再起動し、セッションが働くように動作させても、/tmpの方にセッションファイルが書き込まれて行きます。
/tmp2のパーミッションを777にしても同じです。
php.iniのsession.save_pathの設定が無視されているようです。
これはどういうことなのでしょうか?
教えて下さい。
0296nobodyさん
2005/08/16(火) 16:05:05ID:???じゃあスクリプトで
ini_set('session.save_path', '/tmp');
とかやってる
わけないよね
ていうか
ini_set('session.save_path', '/tmp2');
としたらどうなる。
0297nobodyさん
2005/08/16(火) 17:06:52ID:???どうもです。m(__;)m
session_start();の前でやるってやつでしょ。
その手も考えたんですけど、それ以前に「なんでこ〜なるの???」状態です。
php.iniの記載が無視されているんですよ。
別のphp.iniを読みに行っているのか?と。(そんなことは無いと思うが・・・)
最後の手段はini_set('session.save_path','/tmp2');ですね。
0299nobodyさん
2005/08/16(火) 18:10:31ID:???他に無いですから・・・
(ZENDのツールがクサイのですが・・・)
尚、ini_set('session.save_path','/tmp2');では動くことを確認しました。
しかし、このini_set()で作ったセッションファイルも、
しかるべき確率で掃除してくれるんでしょうかね?
まぁ、暫く見ていれば分かる話なので観察しますよ・・・orz
お手数をお掛けしました。ありがとうございました。 (´・ω・`)ノ~~~
0300nobodyさん@299
2005/08/16(火) 19:06:15ID:???ini_set('session.save_path','/hoge');で作られたセッションファイルも消してくれるんですね。
1440秒経ったら100分の1の確率で掃除してくれます。
これで行きますよ。
(´^ω^`)ノ~~~~
0301nobodyさん
2005/08/27(土) 22:03:36ID:???0302nobodyさん
2005/09/10(土) 06:23:44ID:???0303nobodyさん
2005/11/01(火) 21:44:14ID:F+HZoSiJ行き来する場合はどうなるのでしょうか。
hiddenでセッションIDを持ち歩く必要性があるという解釈でよいの
でしょうか。
0304nobodyさん
2005/11/03(木) 02:42:33ID:8uhVEs5zhttp://www.hardened-php.net/advisory_202005.79.html
http://www.hardened-php.net/globals-problem
http://blog.ohgaki.net/index.php/yohgaki/2005/11/02/phpa_rc_fei_a_oa_oa_fa_sa_le_acsa_oe_afp
PHPに深刻な脆弱性がある事が発表されました。今まで見つかったPHPの脆弱性の中でも「最悪」の脆弱性です。全てのPHPユーザは今すぐ対処を行う必要があります。
0305nobodyさん
2006/01/24(火) 11:00:18ID:1bRZq7Cs0306nobodyさん
2006/02/08(水) 19:28:12ID:???これを残さないようにすることってできるのかな?
0307nobodyさん
2006/02/08(水) 20:13:42ID:???セッションファイルはちゃんとガーベージコレクトされる筈だが。
ガーベージコレクトのタイミングやゴミとみなされるまでの時間を見直したら?
0308nobodyさん
2006/02/12(日) 22:08:23ID:8opibPhpセッションハンドラをいじればDBにだって保存できるぞ。
0312nobodyさん
2006/02/15(水) 12:02:34ID:???それとも知ったかぶりしてるの?
0314nobodyさん
2006/02/15(水) 13:19:08ID:???そりゃcookieでSIDを持たせた方が、安全性は高まるけど
そうではなくGETとか選択してるのは、理由があってやってるんだろ?
0315nobodyさん
2006/02/15(水) 14:53:21ID:???0316nobodyさん
2006/02/27(月) 21:51:57ID:UfqSpQ0b要するにパスワードかなんかでふるいにかけても
URLで「login=ok」みたいに渡しちゃってたら誰でも入れてこれは困ったな
見たいになるのを防ぐものなんですか?
0317nobodyさん
2006/02/28(火) 01:15:27ID:FEcOQ9wP0318nobodyさん
2006/02/28(火) 08:22:56ID:???>「login=ok」みたいに渡しちゃって
ということを普通は最初からしないので、何とも。
セッションはその名のとおり、C/S間のやり取りが
継続しているということを実現するための仕組み。
かといって特に新しいことも、物凄く高度なことでもなく
かつてPHPの標準のセッション機能が無い頃は、各々が
ごく当たり前に独自にセッション機能を作ってやってたもんだよ。
(PHPlibとかあったけど)
だから今でも、何も難しく考えることはない。ただあるものを使えばいい。
0319nobodyさん
2006/03/12(日) 22:04:26ID:???セッション乗っ取れば認証回避出来るよ。
0320nobodyさん
2006/03/14(火) 02:05:53ID:???めちゃくちゃセッション作ってくれるとおもうんだけど
貴殿らどういう対策してる?
0323nobodyさん
2006/03/14(火) 21:59:30ID:???ううむ、やっぱそのレベルで防がないとだめかー
スクリプトレベルで防ぐのはあんまり賢くないかな
たとえば何件いったら新規セッションを一時発行しなくするとかね
>>322
クッキー拒否だと新規セッションにならない?
0324nobodyさん
2006/03/15(水) 02:07:44ID:???0325nobodyさん
2006/03/15(水) 12:33:20ID:aJbbMre9httpdより前でブロックって
何を使ったらできるの?
0327nobodyさん
2006/03/16(木) 00:21:52ID:???httpd自身(libwrappr)とか鯖のIP処理レベルとか、本命のファイヤーウォールとか。
ちなみにルータで処理させるとルータの負荷が騰がって、他の通信にも影響が出るから辞めるべき。
mod_php弄って特定IPからのアクセスにRSTパケット返しちゃうってのも、F5連打廚にはいいカモな。
0328321
2006/03/16(木) 01:53:28ID:???自分が使ってるのはiptablesだから、そこの中で。
つかhttpだけじゃなくて、sshやftpへのブルートフォースアタックがかなり多いので、
それらもまとめて弾いてる。Apacheでやるなら、mod_dosevasiveみたいなまんまの奴や
帯域を絞るモジュールなど色々あるよ。
phpで対処するってのは、自分で手を出せるところの範囲が狭くて
どうしようもない時の残された方法かと。F5アタックならphpでなくても
負荷のかかるコンテンツならどこを狙っても良いわけだし。
レンタルサーバなら、収容している他のユーザが対処してないなら意味無いしね。
0329nobodyさん
2006/03/19(日) 01:37:13ID:???皆さんのところは何を使ってますか?
とりあえずうちは「session_pgsql」を使ってますが他になにかいいのないですかねぇ。
0330nobodyさん
2006/03/19(日) 17:39:22ID:???0331nobodyさん
2006/03/19(日) 19:47:54ID:???何からパクりましたか?
0332nobodyさん
2006/03/20(月) 20:33:13ID:???IPとブラウザのUA(吐かない場合あり)チェックだけだと
例えば社内LANとかでのハイジャックの危険性は残ったままだよね?
何かいい方法ないですか?
0335nobodyさん
2006/03/32(土) 12:40:07ID:/aohY8EPclass session{
var $idname;
var $id;
function session($idname=""){
if(!isset($idname) || $idname=="") $idname="sid";
$this->idname=$idname;
$this->id=$_GET[$this->idname];
if($this->id==""){
$this->id=$_POST[$this->idname];
}
}
function init($id=""){
if(isset($id)&& ($id!="")){
session_id($id);
session_start();
$this->id=$id;
}else{
if(isset($this->id) && ($this->id!="")){
session_id($this->id);
session_start();
}else{
session_start();
$this->id=session_id();
}
}
}
0336nobodyさん
2006/03/32(土) 12:41:53ID:/aohY8EPreturn $this->id;
}
function VarExist($varname){
if(isset($_SESSION[$varname])) return TRUE;
return FALSE;
}
function get($varname){
if($this->VarExist($varname)) return $_SESSION[$varname];
return FALSE;
}
function set($varname,$value){
$_SESSION[$varname]=$value;
}
function remove($varname){
unset($_SESSION[$varname]);
unset($GLOBALS[$varname]);
return TRUE;
}
function clear(){
while (list($key, $val) = each($_SESSION)){
unset($_SESSION[$key]);
unset($GLOBALS[$key]);
}
}
}
?>
0337nobodyさん
2006/04/02(日) 02:53:22ID:???0338nobodyさん
2006/04/13(木) 10:40:48ID:YOyrE4Luセッション発行してるみたいで、PCではセッションを採取できません。
特定のセッションが欲しいのではなく発行されているセッションであればOKです。
セッションの有効期限は3分?ランキングアウトPhpでセッション破棄しています。
何か有効な方法があれば教えてください。
0341nobodyさん
2006/04/13(木) 15:44:28ID:???まぁ昔のRanklink改造した奴なんか簡単にセッションハイジャック出来たが、
セッション管理をファイルでやっててそのファイルがあるディレクトリに穴でもない限りは無理やね。
0342nobodyさん
2006/04/29(土) 20:43:42ID:???関数の話がしたいならPHPスレじゃね?
0343nobodyさん
2006/05/11(木) 17:30:38ID:???0344nobodyさん
2006/05/11(木) 20:40:30ID:VDpWubyB10日以上前の書き込みにレスしちまった。。
ヤケクソage
0345nobodyさん
2006/05/12(金) 18:45:44ID:???0346nobodyさん
2006/05/12(金) 23:27:13ID:???なんか期待しちまうじゃないかorz
0347nobodyさん
2006/05/15(月) 01:15:16ID:???そのまえに鯖が異常に重くなってあぼんするだろうけど(w
0348nobodyさん
2006/05/17(水) 22:20:27ID:???PHPじゃないとセッションつかえないと思ってる香具師の数→
0349nobodyさん
2006/05/19(金) 19:09:45ID:???を入れるという実装って普通しますか?
IPアドレスなんて変わることが多いからそんなことしないかと思っていたの
ですが
0350nobodyさん
2006/05/19(金) 19:18:14ID:???再利用しているところが多いし、同じIPアドレスを使ってるPCだって結構ある。
0351nobodyさん
2006/05/19(金) 19:22:28ID:???あと同じIPアドレスを使っているというのは、NATのことでしょうか?
それくらいしか思いつかなかった。
0352nobodyさん
2006/05/19(金) 19:22:52ID:oMRPSSzCSSLを使わないでデータを安全にやりとりする方法ってありますか?
JavaScriptとPHPでRSA暗号使ってやりとりしようと思ったのですが、
もっとスマートで対応するブラウザが多い方法ってありますか?
どなたかご存じの方教えていただけると嬉しいです。
0354nobodyさん
2006/05/19(金) 21:39:58ID:???RSAで簡単にやるのがSSLなんだけどね。わざわざSSL使わずにどうにかするほうが面倒で難しい。
0355352
2006/05/19(金) 21:59:02ID:???きょうびJavaScriptに対応しないブラウザよりSSLに対応しないブラウザの歩が珍しいかな。。orz
0357nobodyさん
2006/05/19(金) 22:52:14ID:???作る「もの」によるかな?
シビアなチェックが要求されるものならIPチェックには頼らないが、セッションハイジャックされたところで
そんなに大したもんでもない程度のものなら、IPチェックすらしてないw
IPチェック程度を実装する事もある
みたいな。
0358nobodyさん
2006/05/19(金) 23:02:07ID:???>>357の書く通りそれに頼ってしまうのは間違いだけど、セッションハイジャックを防ぐ方法としては比較的一般的に使われてる手法。
http://www.google.com/search?num=50&hl=ja&q=%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%8F%E3%82%A4%E3%82%B8%E3%83%A3%E3%83%83%E3%82%AF+%EF%BC%A9%EF%BC%B0+%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
0359nobodyさん
2006/05/20(土) 10:09:53ID:???実際にどんな場合に利用してます?
個人的には無意味かなぁと思っていたのですが
保険的に利用する場合ってIPチェックして違った場合、ログを残すとかそんな感じですか?
0361nobodyさん
2006/05/21(日) 17:21:39ID:???ログイン後、操作をしない(通信をしない)時間が数分続くと、
勝手にログアウトしてしまいます。
ブラウザを閉じたわけでもないですし、session.gc_maxlifetimeは1440あります。
明示的にログアウト処理をしない限りログイン状態が続くようにしたいのですが、
どこの設定をいじれば良いのでしょうか・・・。
0363nobodyさん
2006/05/21(日) 22:09:56ID:???そう。あんまり意味無い。
でも、全く意味が無いってわけでも無い。
つまり、それ程シビアなチェックを必要とされないものなら、この程度でも良いかもね程度に考えておけばと。
とにかくだな。
あくまで1つの手段としてこんなのもあるよって話しなので、気に入らないのなら別の方法を実装すれば良いだけの話。
頭で色々考えるのも良いが、まずは先に物を作って実際に動かした方が余程勉強になるかと。
0364nobodyさん
2006/05/21(日) 22:13:15ID:???↓書き方悪かったな。
まずは先に物を作って実際に動かした方が余程勉強になるかと。
↑っていうのは、自分でセッションを使う簡易的なサイトでも作ってみて、それを自分でセッションハイジャック出来るかどうか試してみたら良いよって感じかな。
ハイジャックできてしまったら、それを防ぐにはどうすれば良いかを考えて改良し、また自分でハイジャックを試す。
そんな感じで完成度を上げていくと良いかなって思う。
0365nobodyさん
2006/05/22(月) 10:41:52ID:???他との併用でしょ。セコムのシール貼ってるだけに近い。実際の防犯にはちゃんと対策が必要。
元々HTTPはステートレス。
セッションを使って無理矢理ステートフルに見せかけてるだけ。
NATとかkeepalive切ってる場合も有るから、鯖でがんばっても無理が有ることが多い。
0366361
2006/05/22(月) 19:04:58ID:???■ このスレッドは過去ログ倉庫に格納されています