HTACCESS中的PHP会话 - 超时

时间:2014-02-06 07:25:41

标签: php .htaccess session

我正在我的“注销”例程中调试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'

显然,我的会话不会被删除/删除。

1 个答案:

答案 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文件中重新创建。