【问题标题】:PHP sessions in HTACCESS - timeoutHTACCESS 中的 PHP 会话 - 超时
【发布时间】:2014-02-06 16:02:36
【问题描述】:

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

但是当它重定向到我的内向脚本时,我的会话仍然存在吗? - 然后它确定我超时,并重定向到我的注销例程。

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'

显然,我的会话没有被删除/移除。

【问题讨论】:

  • 您是否要销毁所有用户的会话?
  • 只是指定用户 - 不是所有用户(退出的用户)。

标签: php .htaccess session


【解决方案1】:

我猜你的文件 'initial.inc.php' 包含在每个脚本的顶部。

在您退出的页面上,您有:

session_unset(); session_destroy();

在这个阶段,您的会话被销毁。那你就做吧

header('位置:http://accounts.DOMAIN.com/');

执行'initial.inc.php';

我假设你在 initial.inc.php 'session_start(); 的开头有,因为你有

$sess=$_SESSION['loggedin'];

而且它似乎没有因为会话丢失而引发警告。因此,您的会话将在您的 initial.inc.php 文件中重新创建。

【讨论】:

  • 是的 - 在每次调用开始时都会调用 initial.inc.php。我的脚本似乎可以登录并使用脚本,但只会导致注销时出现循环。
  • 您能否在第一次注销重定向后记录 var-dump( $sess=$_SESSION['loggedin'] ) 的输出?它似乎是>0,而它应该是== null,对吧?
  • 我现在将我的脚本更改为:- $sess=0; $logrep.="SESS NOW '$sess'\n"; $logrep.=var_dump($sess=$_SESSION['loggedin']); $logrep.="SESSNOW2 - '$sess'\n\n\n"; $text.="登录时间$sess\n"; $logrep.="\nSESS = $sess\n"; $temp2=时间(); $temp1=($sess-$temp2); $logrep.="IFF SESS $sess > TIME $time - TEMP $temp1\n"; if($sess>0) { - 重定向到注销例程....(删除了一些代码)结果:- OLD SESS - '1391680203' SESS NOW '0' SESSNOW2 - '1391680203' 显然,我的会话没有被删除/ 删除。
  • 参见 EDIT2。我的日志中没有任何额外内容,但在可见屏幕的顶部,我得到了很多“int(1391680203)”——这是当前时间(我认为?)
  • 在您已注销的脚本中尝试 $_SESSION['loggedin']=0。这应该可以暂时解决您的问题。明天我会尝试重现这个。
猜你喜欢
  • 2012-05-29
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 2011-03-05
  • 2011-10-17
相关资源
最近更新 更多