2013-07-16 53 views
0

我试图在互联网和堆栈溢出看我的问题,但没有找到解决我的问题的答案。所以我有一个我为一个开源项目创建的网站的后端系统。我现在刚刚完成将所有内容传输到我的在线域和数据库。在解决了很多其他问题之后,它现在可以工作,除了注销外。PHP注销将无法在线工作

在我的后端头我有以下网址

<a href="logout.php"><h1>Logout</h1></a> 

logout.php页面的内容如下:

<?php 
session_regenerate_id(); 
session_start(); 
session_unset(); 
$_SESSION = array(); 
session_destroy(); 

header("Location: login.php"); 
?> 

离线,通过甲基苯丙胺这工作没有任何问题。但是,它不会破坏我的会话。我仍然可以访问我的所有会话变量,这使我能够保持登录状态。正如我之前所说的,我试图寻找答案,但我似乎找不到解决我的问题的答案。如果任何人有线索可能是错误的,请告诉我。提前致谢!

编辑: 这是我如何检查每个后端页面上,用是否我登录:

function sec_session_start() { 
    $session_name = 'sec_session_id'; // Set a custom session name 
    $secure = false; // Set to true if using https. 
    $httponly = true; // This stops javascript being able to access the session id. 

    ini_set('session.use_only_cookies', 1); // Forces sessions to only use cookies. 
    $cookieParams = session_get_cookie_params(); // Gets current cookies params. 
    session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly); 
    session_name($session_name); // Sets the session name to the one set above. 
    session_regenerate_id(true); // regenerated the session, delete the old one. 
    session_start(); // Start the php session 
} 

正如你看到的,@paulprogrammer,我做了什么与饼干。我在注销时如何销毁它?

编辑(2):paulprogrammer用于指针

确定感谢。我从我的登录检查功能中删除了Cookie部分,并将其转换为以下简单功能:

function sec_session_start() { 
session_start(); 
} 

这不会创建cookie,现在它可以工作。我试图通过官方php manul所说的@http://php.net/manual/en/function.session-destroy.php来取消cookie的设置,但那并没有。所以这就是为什么我转向更简单的方法。由于除我以外没有多少人会使用后端,因为它似乎工作正常,即使没有cookie,我也称它完成了。本主题可以被关闭:)

最终编辑(3): 好感谢* @paulprogrammer它与cookies现在工作为好。现在我知道答案了,你必须这样做似乎是合乎逻辑的。我愚蠢。好吧,显然我必须设置会话的名称,就像我在会议中所做的一样。我一开始就这样做,在我开始之前。新的,更新日志的检查功能代码:

<?php 
session_name('sec_session_id'); 
session_start(); 
setcookie(session_name(), '', 100); 
session_unset(); 
session_destroy(); 
$_SESSION = array(); 

header("Location: login.php"); 
?> 
+0

您正在查看** cookie **值而不是** session **值的任何机会? – PaulProgrammer

+0

@PauProgrammer我认为你可能在正确的方向。检查我的原始帖子的编辑是否有更新。 – GlenDC

+0

尝试在注销脚本中执行'session_name($ session_name);',否则PHP将仅销毁默认会话cookie。 – PaulProgrammer

回答

0

你在你的设置代码设置会话名称,但未能将其设置在拆解代码。所以,在拆卸期间,PHP正在销毁默认会话名称,而不是您的自定义会话名称。自定义会话名称在注销后仍然可用。

只要坚持用session_name()功能的任何地方正在使用会话操作,保证了会话管理始终作用于正确的会话令牌。

在您的登出。php:

<?php 
session_name('sec_session_id'); 

session_regenerate_id(); 
session_start(); 
session_unset(); 
$_SESSION = array(); 
session_destroy(); 

header("Location: login.php"); 
?>