このページでは,もし可能ならクッキーを使います。 セッションクッキーですので,ブラウザを終了させればクッキーも消えます。
あなたは今回このページに 始めてですね(あるいはクッキーが保存されていませんね)。
再読み込みするか,別のページに行ってからもう一度このページを見てください。
<?php
session_set_cookie_params(0, '/~okumura/');
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>私のホームページ</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<p>あなたは今回このページに
<?php
if (isset($_SESSION['cnt'])) {
echo $_SESSION['cnt'], " 回目ですね。";
} else {
$_SESSION['cnt'] = 1;
echo "始めてですね(あるいはクッキーが保存されていませんね)。";
}
$_SESSION['cnt']++;
?>
</p>
</body>
</html>
クッキーとは,サーバがブラウザに発行するものです。
このPHPファイルや,このページからリンクされたPHPファイルの先頭には,次のように書いてあります。
<?php session_set_cookie_params(0, '/~okumura/'); session_start(); ?>
サーバに他のユーザがサイトを作っていない場合は,単に次のようにするだけでかまいません。
<?php session_start(); ?>
これは,
PHPSESSID9p6drdsi5bo1e33mej0hg32du4をクッキーにして,あなたのブラウザに食べさせようとします。 実際にあなたのブラウザがこのクッキーを食べるか捨てるかは自由です。
上の2行は,PHP のソースでは
<ul> <li>セッション名: <code><?php echo htmlspecialchars(session_name()); ?></code></li> <li>セッションID: <code><?php echo htmlspecialchars(session_id()); ?></code></li> </ul>と書いてあります。
セッション名は,無指定では PHPSESSID という文字列になります。
セッションIDはランダムな文字列です。
クッキーは通常はクッキーを発行したサイトのどのページからも読めます。 複数のユーザがサイトを作っている共用サーバでは,これでは他のユーザにセッションを盗まれてしまうので,
session_set_cookie_params(0, '/~okumura/');
のようにして,/~okumura/ 以下だけで読み出せるようにしておきます(ただしフレームを使えばこの制限をかいくぐることができますので絶対に安全というわけではありません)。
クッキーはブラウザを終了するまで有効ですが,session_set_cookie_params
関数の第1引数(0 となっているところ)を例えば1000にしておけば,1000秒間有効になります。
サーバに他のユーザがサイトを作っていない場合は,第2引数を省略して例えば次のようにします。
<?php session_set_cookie_params(1000); session_start(); ?>
セッション中では,$_SESSION['foo'] などといった変数がページを超えて使えます。
クッキーとしてブラウザに送られるものはセッションIDだけです。
情報の実体は,でフォルトではサーバの /tmp
ディレクトリの中にファイルとして入ります。
セッションの数だけファイルができます。
他の人がログインできるサーバで /tmp
のようなところにファイルを置いておくのは危険かもしれません。
中身は見えなくても,セッションIDがファイル名からばれてしまいます。
置き場所を変えるには,PHPの設定ファイル php.ini で
session.save_path = "/var/hoge/sessions"
のように指定するか,あるいはPHPファイル中の session_start(); の前に
session_save_path("/var/hoge/sessions");
のように指定します。 このディレクトリは管理人と apache にしか読み書きできないようにします。
セッション管理がうまくいかない場合は,php.ini で
output_buffering = Off
となっていたら右辺を 4096 とかにしてみてください。
Last modified: 2010-05-02 08:23:16