プロが教えるわが家の防犯対策術!

セッション機能を使って開発していたのですが、どうも思うように動作しないので、書籍に載っていた簡単なプログラムを試してみましたが動作しませんでした。

<書籍のソース>
<?php
session_name("MYSESS");
session_start();
if(!session_is_registered("access"))
{
session_register("access");
$access=1;
}
else
{
$access++;
}
?>
<html>
<body>
<p><?=$access?>回目の訪問です</p>
<p><a href="sample.php?<?=SID?>">ここをクリック</a></p>
</body>
</html>
実行すると、「1回目の訪問です」と出て、クリックしても1回目のままで、増えることがありません。

<php.iniのsessionに関する部分の設定>
[Session]
session.name=PHPSESSID
session.auto_start=1
session.serialize_handler=php
session.gc_probability=1
session.gc_divisor=100
session.gc_maxlifetime=1440
session.bug_compat_42=0
session.bug_compat_warn=0
session.cache_limiter=nocache
session.cache_expire=180
session.use_trans_sid=0

セッションデータは、ファイルとしては保存されていますが、中を見ると
access|N;
となっています。
他にもスクリプトを試しましたがすべてこのファイルのデータはNのままで値が保存されることがありません。

お気づきの点がありましたらご指摘をお願いいたします。

A 回答 (2件)

php.ini で register_globals が Off に設定されていると session_register 関数は使用できないようです。


確認してみてください。
また個人的にはこの使い方は推奨しません。
$_SESSION 変数を介したやり方がセッションを使っているということが明示的になり結果的にわかりやすいプログラムを書くことができると思います。
$_SESSIONに置き換えたプログラムを載せておきます。

<?php
session_name("MYSESS");
session_start();
if($_SESSION['access'] == "" )
{
$_SESSION['access']=1;
}
else
{
$_SESSION['access']++;
}
?>
<html>
<body>
<p><?=$_SESSION['access']?>回目の訪問です</p>
<p><a href="test4.php">ここをクリック</a></p>
</body>
</html>

これは単に $_SESSION に置き換えただけなのでちょっと汚らしいですが、こんな感じでできます。
    • good
    • 0
この回答へのお礼

ソースまでご丁寧にありがとうございました。
無事に動作いたしました。
助かります。

お礼日時:2005/08/17 14:01

その書籍の記載はかなり古いですね。


register globalsがonでないと動かないと思います。
PHP4.2.0からはセキュリティ上register globalsはoffがデフォルトになっているのでそのスクリプトでは動きません。
今はsession_registerよりも$_SESSIONの使用が推奨されているので新しいサンプルでテストされたらいいと思います。

参考URL:http://www.php.net/manual/ja/ref.session.php
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考になりました。

お礼日時:2005/08/17 13:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!