我有一个PHP login
和注销脚本,我想要实现的是当用户点击注销链接时他完全注销,无论点击浏览器的后退按钮,还是不希望用户访问该页面。应将其重定向到login
页面
这是登录功能
function loggedin() {
if ( isset($_SESSION['user_id']) && !empty($_SESSION['user_id']) ) {
return true;
} else{
return false;
}
}
这是我的退出脚本
<?php
include 'includes/connect.php';
include 'includes/functions.php';
session_destroy();
header('location: index.php');
?>
我怎样才能实现这个目标?
答案 0 :(得分:2)
您可以删除所有Cookie
if (isset($_SERVER['HTTP_COOKIE'])) {
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie) {
$parts = explode('=', $cookie);
$name = trim($parts[0]);
setcookie($name, '', time()-1000);
setcookie($name, '', time()-1000, '/');
}
}
http://www.php.net/manual/en/function.setcookie.php#73484
如果你有一组用于登录验证的cookie名称,你应该只用它们迭代循环。
答案 1 :(得分:2)
问题是完全从网站注销用户,而不仅仅是如何销毁PHP会话,所以我的答案会更复杂一些。
由于您使用PHP的$_SESSION
功能来处理用户会话,因此您可以特别将当前会话ID绑定到用户帐户。然后,您可以轻松强制会话过期。
例如,在用户数据库中创建一个新字段,并将其命名为active_session_id
或其他内容。每次用户登录时,都会将session_id()
输出保存到其中。然后在loggedin()
函数内部检查当前请求的session_id()
是否与用户登录时保存的那个匹配,如果不匹配,则该函数将返回false,因此这是如何你实际上结束了用户会话。即即使它仍然存在,它将不再有效。
值得注意的是,上述解决方案将是一种one-to-one
关系,即一个用户只能有一个活动会话。如果您希望允许用户同时来自不同的地方,则必须通过创建一个名为“例如”的新表来保持one-to-many
关系。 users_sessions
并在那里保存会话ID。请不要在当前用户表格中创建其他字段,例如active_session_id_1
,active_session_id_2
等,因为这不是一个好习惯。
希望这有帮助
答案 2 :(得分:1)
您可以编写一个通用函数来检查用户是否已登录,如果不是仅仅重定向它们
function isLoggedIn(){
if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])){
//do what you want
} else{
header("location:youloginpage.php");
}
}
答案 3 :(得分:1)
如果您未在问题上指定更多内容,我们只能按假设进行处理。无论如何,由于您正在使用该SESSION,并且不清楚是否要销毁所包含的数据,检查用户是否已登录的功能可以通过以下方式进行修改:
function loggedin() {
if ( isset($_SESSION['user_id']) && is_numeric($_SESSION['user_id']) && ($_SESSION['user_id'] > 0) ) {
return true; //user is logged in
//other operations to be performed
} else{
return false; //user is NOT logged in
//other operations to be performed
}
}
注销功能可能是这样的:
function logout() {
if ( isset($_SESSION['user_id']) && is_numeric($_SESSION['user_id']) && ($_SESSION['user_id'] > 0) ) {
$_SESSION['user_id'] = -1; //"unsets" the user, while not destroyng session
} else{
return false; //user is already logged out - do nothing
}
}