保持跟踪PHP会话

时间:2017-01-11 21:19:06

标签: php session

这是一个简单的PHP代码:

@session_start();
session_destroy();
if (isset($_SESSION['l']))
    echo 'Session set';
else
  echo 'Session unset';

$_SESSION['l'] = 9;
echo ' : ' . $_SESSION['l'];

以上程序的输出将始终如一     会话未设置:9 因为每次运行都会破坏所有会话      session_destroy 并创建新会话。

现在我正在评论 session_destroy:

//session_destroy

现在根据逻辑链,如果我重新运行脚本,会话现在不会被销毁,因此程序应该输出会话集:9 ,而它仍然显示会议未设置:9 。但是,再次运行脚本,我得到输出会话集:9

我的问题是为什么即使在评论 session_destroy 之后,我在第一次运行的脚本上获得会话未设置:9

2 个答案:

答案 0 :(得分:0)

  

我的问题是为什么我会在第一次运行脚本时取消会话:9,即使在评论session_destroy之后。

因为您还没有设置变量$ _SESSION [' l']。这里的关键词在你自己的引用中:"在第一次运行"。

如果PHP是无所不知的,它可能知道您希望设置$ _SESSION [' l']。

但它不是,所以测试失败,你的脚本说'#34; Session Unset"。

现在,如果您使用会话集在您的网站上导航而未在其他网页上销毁,则会话 仍应记住$ _SESSION [' l']。 ..除非某些其他页面未设置该变量。

所以,如果你加载这个页面,然后导航一下并回到它,它应该说"会话设置"。如果它没有,那么您的会话机制本身就会出现问题。检查session.use_only_cookies的php.ini值和session.use_trans_sid的值。确保如果您阻止使用SID的cookie,如果没有,请确保您从服务器获取cookie。

另请阅读友善手册:http://php.net/manual/en/book.session.php

答案 1 :(得分:0)

您的问题: 为什么我在第一次运行脚本时没有设置Session = 9,甚至在评论session_destroy之后。

因为您从未向$_SESSION['l']提供值,因此当您运行代码时

if (isset($_SESSION['l']))
    echo 'Session set';
else
  echo 'Session unset';

isset($SESSION['l'])始终返回 false

但是,如果您使用以下代码,则应获得预期的结果:

@session_start();
$_SESSION['l'] = 9;
session_destroy();
if (isset($_SESSION['l']))
    echo 'Session set';
else
  echo 'Session unset';

$_SESSION['l'] = 9;
echo ' : ' . $_SESSION['l'];

如果能帮助你@Himanshu Agrawal,请告诉我。)