我正在我的“注销”例程中调试PHP中的无限循环问题。
if($_SESSION)
{
session_unset();
session_destroy();
}
sleep(1);
header('7location: http://accounts.DOMAIN.com/');
exit;
在我的main / initial.inc.php脚本中,我有: -
$sess=0;
$sess=$_SESSION['loggedin'];
foreach($_SESSION as $asw => $asd)
{
$logrep.="SESSW '$asw' '$asd'\n";
}
if($sess>0)
{
if($sess<$ty)
{
$logrep.="is timed out - logging out\n";
header('Location: http://accounts.DOMAIN.com/logout/');
exit;
还有一些我已经拿出来的代码 - 但在我的'退出'脚本中我得到了DESTROY / UNSET等 -
但是当它重定向到我的内向脚本时,我的会话仍然存在? - &amp;然后它确定我已经超时了,&amp;重定向到我的注销例程。
QUERY:是否有一种删除/删除所有会话的万无一失的方法?
QUERY: -
$previous_name = session_name("NAME");
session_save_path("$directory");
session_start();
我可以使用php.ini行替换session_name,以便所有/任何PHP脚本使用相同的名称吗? (以防万一有些脚本没有使用指定的会话。)
编辑: -
如果我使用
session_unset();
session_destroy();
会破坏所有会话吗?还是只是当前命名的? (我怀疑我的一些脚本没有使用命名会话)
Ps - 脚本位于不同的目录/子域中。
编辑2: -
我现在把我的剧本变成了: -
$sess=0;
$logrep.="SESS NOW '$sess'\n";
$logrep.=var_dump( $sess=$_SESSION['loggedin']);
$logrep.="SESSNOW2 - '$sess'\n\n\n";
$text.="Logged in time $sess\n";
$logrep.="\nSESS = $sess\n";
$temp2=time();
$temp1=($sess-$temp2);
$logrep.="IFF SESS $sess > TIME $time - TEMP $temp1\n";
if($sess>0)
{
- redirect to log out routine ....
(删除了一些代码)
结果: -
OLD SESS - '1391680203'
SESS NOW '0'
SESSNOW2 - '1391680203'
显然,我的会话不会被删除/删除。
答案 0 :(得分:0)
我猜你的文件'initial.inc.php'包含在每个脚本的顶部。
在您已注销的页面上,您有:
session_unset(); session_destroy();
在此阶段,您的会话将被销毁。然后你做
标题('location:http://accounts.DOMAIN.com/');
执行'initial.inc.php';
我假设你在initial.inc.php'session_start();的开头有,因为你有
$sess=$_SESSION['loggedin'];
由于缺少会话,它似乎不会发出警告。因此,您的会话将在initial.inc.php文件中重新创建。