【PHP】セッションについて語ろう!【PHP】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/09/24 19:31ID:SnRvXmpIブラウザを閉じることでクッキーを消しているからなのですね。。
知らなかったよーーーーうわーーーん
0238nobodyさん
05/02/20 15:45:27ID:HD8VrkSMURLにクエリ文字列を埋め込む方法等とどのように使い分ければいい?
0239nobodyさん
05/02/20 18:02:46ID:6EZLRG8p0240nobodyさん
05/02/20 18:26:29ID:???POST・GETの話じゃなくて、セッション使用とページ毎に全データ渡しの話の希ガス
オイラは特に使い分けはしてない。その時の気分次第
0241nobodyさん
05/02/20 18:39:53ID:6EZLRG8pセッション切れてたらTOPページにリダイレクトするとかで良いんじゃね?
0242238
05/02/21 02:23:56ID:???ものはhiddenやクエリーで持ち、ログインIDやパスワードのような
ずっと持ちまわすようなものはセッションというような使い分けかな?
と自己レス。
0243nobodyさん
05/02/22 00:15:50ID:???0244nobodyさん
05/02/22 07:48:53ID:???0246nobodyさん
05/02/22 18:43:15ID:???PHPはマニュアルが充実してるんで、殆どそれ見ながら覚えたヨ!
0247nobodyさん
05/02/23 08:55:22ID:mE2XQAit0248nobodyさん
05/02/24 17:29:34ID:???0249nobodyさん
05/02/24 19:49:22ID:???0251nobodyさん
05/02/24 23:25:30ID:???「PHPできます」って面接で言っちゃって大丈夫。
俺はそうした。余裕でしょこんな雑魚言語。
0252nobodyさん
05/02/24 23:33:01ID:???つうてもJava5年とか書かれてるスキルシートも全然あてにはならんが。
0254nobodyさん
05/02/25 01:10:45ID:???0255251
05/02/25 23:52:19ID:???正直プログラマとしてのセンスを疑うね。
0256nobodyさん
05/02/25 23:54:11ID:4WDXXuTL0257nobodyさん
05/02/25 23:59:29ID:???0259nobodyさん
05/02/26 10:30:38ID:???0260251
05/02/26 22:58:19ID:???ちなみに俺は会社に入ったわけじゃなくて個人事業主として
業務委託されてるだけだけどな。
0261nobodyさん
05/02/26 23:20:36ID:???セッションの話まだー?チンチン
0262nobodyさん
05/02/27 01:15:18ID:???0264nobodyさん
05/03/01 22:07:03ID:???page2でgreenとcatと時間が表示されるはずですが、
Welcome to page #2
1969 12 31 23:57:00
page 1
しか表示されません。なんででしょう・・・(´・ω・`)
--------------------------------------------
<?php
session_start();
echo 'Welcome to page #1';
$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time();
// cookieによるセッションが受け入れられていれば動作します
echo '<br /><a href="page2.php">page 2</a>';
// あるいは必要ならセッションIDを付加します
echo '<br /><a href="page2.php?' . SID . '">page 2</a>';
?>
-----------------------------------------------
<?php
session_start();
echo 'Welcome to page #2<br>';
echo $_SESSION['favcolor']; // green
echo $_SESSION['animal']; // cat
echo date('Y m d H:i:s', $_SESSION['time']);
// page1.phpでやったように、ここでSIDを使うことができます。
echo '<br /><a href="page1.php">page 1</a>';
?>
0265nobodyさん@264
05/03/01 22:08:48ID:B0aTXW7COSとPHPは
Apache/1.3.28 (Win32)
PHP/4.3.10 です。
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]);
}
}
}
?>
■ このスレッドは過去ログ倉庫に格納されています