2010-08-14 47 views
0

我需要设置自动会话超时后,在我的网站一些固定的时间。自动会话超时

我用下面的脚本,但它不能正常工作。

我设置了一段时间,但在此之前它会自动超时。

if((empty($Session_UserId)) || (empty($Session_Username))) 
    header("Location:index.php"); 

if($_SESSION['session_count'] == 0) { 
$_SESSION['session_count'] = 1; 
$_SESSION['session_start_time']=time(); 
} else { 
$_SESSION['session_count'] = $_SESSION['session_count'] + 1; 
} 

$session_timeout = $logout_sec; // 30 minute (in sec) 

$session_duration = time() - $_SESSION['session_start_time']; 
if ($session_duration > $session_timeout) { 
session_unset(); 
session_destroy(); 
session_start(); 
session_regenerate_id(true); 
$_SESSION["expired"] = "yes"; 
header("Location:index.php"); // Redirect to Login Page 
} else { 
$_SESSION['session_start_time']=time(); 
} 
+0

我看到session_start()在脚本的更远处,就重置会话...而言,它的session_start()在哪里呢?这是完整的脚本还是在它之前的某个地方,而你只是没有发布它? – 2010-08-14 17:59:47

+0

是的,你是正确的,这是我已经添加的脚本的一部分session_start() – gowri 2010-08-16 04:27:41

回答

0

你的代码的问题是最后一个if/else结构。因为如果会话没有超时,会话开始时间被设置为当前时间。所以这是一个“最后的活动”时间戳。如果删除else块,则会话将不会超过您的超时时间。

+0

你可以给我正确的代码 谢谢 – gowri 2010-08-16 05:27:07

+0

@gowri:我不太清楚你的代码打算做什么。但是,如果您放弃最后一次'$ _SESSION ['session_start_time'] = time()',会话开始时间不会在会话尚未超时的每个请求中得到更新。 – Gumbo 2010-08-16 05:42:12

1

我想人们想说的是,试试下面的代码。这是你的代码的复制/粘贴,没有最后的else语句。

if((empty($Session_UserId)) || (empty($Session_Username))) 
header("Location:index.php"); 

if($_SESSION['session_count'] == 0) { 
$_SESSION['session_count'] = 1; 
$_SESSION['session_start_time']=time(); 
} else { 
$_SESSION['session_count'] = $_SESSION['session_count'] + 1; 
} 

$session_timeout = $logout_sec; // 30 minute (in sec) 

$session_duration = time() - $_SESSION['session_start_time']; 
if ($session_duration > $session_timeout) { 
session_unset(); 
session_destroy(); 
session_start(); 
session_regenerate_id(true); 
$_SESSION["expired"] = "yes"; 
header("Location:index.php"); // Redirect to Login Page 
}