• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

session_destroy()没有记录我出去

php 来源:Rand 4次浏览

每当我运行logout.php脚本,然后再回到那个没有被登录,将无我还在session_destroy()没有记录我出去

logout.php登录保护的网页上

<?php 

session_start(); 
session_unset(); 
session_destroy(); 
header("Location: ../index.php"); 
exit(); 
?> 

的login.php

$userlogin = user_login($email, $password.$salt); 
    if ($userlogin==false){ 
     $errors[]='Wrong email/password combination.'; 
    } else { 
    //set the user session 
     $_SESSION['UserId']=$userlogin; 
     $_SESSION['LoginIP']=$_SERVER['REMOTE_ADDR']; 
     $db->query("UPDATE users SET ipadd='".$_SERVER['REMOTE_ADDR']."' WHERE user_id=".$_SESSION['UserId'].""); 
     echo '<meta http-equiv="refresh" content="0; URL=index.php">'; 

检查记录在片段

/* Check if user is logged in or not */ 
function loggedin(){ 
return (isset($_SESSION['UserId'])) ? true : false; 
} 
if (loggedin()==true){ 
$session_user_id = $_SESSION['UserId']; 
$user_data = user_data($session_user_id,'full_name','username'); 
$rezult =$db->query("SELECT ipadd FROM users WHERE user_id=".$_SESSION['UserId'].""); 
while($rez = $rezult->fetch_assoc()){ 
    if ($rez['ipadd']==$_SERVER['REMOTE_ADDR']) { 
    } else { 
    echo '<meta http-equiv="refresh" content="0; URL=logout2.php">'; 
    } 

} 
} 

一直在看同一问题的帖子,但无论我尝试仍然得到相同的问题。任何建议将非常感激!

===========解决方案如下:

我总是喜欢破坏服务器会话和客户端的cookie,如有任何错误,请尝试手动覆盖所有选项。

你可以摧毁PHP饼干:

setcookie(session_name(), '', time() - 3600, $cookie_path, $cookie_domain, $cookie_secure, $cookie_httponly); 


<?php 
$cookie_path = "..."; 
$cookie_domain = "..."; 
$cookie_secure = "..."; 
$cookie_httponly = "..."; 

session_start(); 
session_unset(); 
session_destroy(); 
setcookie(session_name(), '', time() - 3600, $cookie_path, $cookie_domain,$cookie_secure, $cookie_httponly); 
header("Location: ../index.php"); 
exit(); 

time() - 3600使得当前的时间,这使得它无效之前Cookie的到期时间。

调查的另一个选项是登出页面上的session_regenerate_id()。有些参考页面下方:

php.net – session-regenerate-id

https://stackoverflow.com/a/22965580/1246494


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)