PHP $ _SESSION变量不会取消设置
对不起重复的问题,我已经看到了其中的一些在这个论坛上,但没有响应的工作对我来说...
我建立使用PHP基本登录会话,这我在新...
的login.php验证HTML登录表单,并开始一个会话,设置变量:$_SESSION['login']
和$_SESSION['id]
,
然后每个需要一个有效的登录页面使用require 'session.php';
哪些检查$_SESSION['valid']
变量,并重定向用户不带适当的登录变量乐。问题是,我注销时,既没有设置的会话变量也没有设置。
现在我的logout.php文件使用关于每种方法来销毁我已经能够在网上找到的变量,没有人会真正做到这一点。
因此,只要我退出,我仍然可以访问'私人'页面。
另外请注意:我已经尝试过了W/O会话名称前:我使用session_start("user");
session_start();
未所以现在的工作还注意:我不使用cookie。
这里是我提到的文件:
的login.php
$email=$_POST['email-log']; $pass=$_POST['password-log'];
$i=-1;
do
{$i++; $path="users/".$i.".json";
$file= file_get_contents($path);
$x=json_decode($file,true);
} while($x['email']!=$email);
$id=$i;
$truepass=$x['pass'];
$errors=0;
$hash=hash('sha256',$pass);
if($hash != $truepass){$errors=$errors+1;}
if($errors==0){
session_start("user");
$_SESSION['login']="valid";
$_SESSION['id']=$id;
header('Location: loginlanding.php');}
else{header('Location: front.php?error=y');}
session.php文件
session_start("user"); if($_SESSION['login'] !== "valid") {header('Location: front.php?needto=login');}
logout.php
unset($_SESSION); unset($_SESSION['login']); unset($_SESSION['id']); session_unset("user"); $_SESSION=array(); session_destroy("user"); header('Location: front.php?logged=out');
任何和所有的反应是欢迎,我感谢你在前进,还要注意,我一般,所以任何建议是新来的登录加强安全性也很受欢迎。我计划让它更安全,但首先我需要启动并运行这个基本功能。
你永远不应该unset($_SESSION)
。
清除$_SESSION
变量最简单的方法是$_SESSION = Array();
然而,你也可以用unset
迭代:
foreach(array_keys($_SESSION) as $k) unset($_SESSION[$k]);
啊哈!问题是,在logout.php我从来没有调用session_start();我不需要session.php,所以它永远不会被调用。现在我的logout.php如下:
为什么要添加'session_destroy(“user”);'?它什么都不做。只要做'session_destroy();' – jeremy
我的工作示例(请注意,您必须将开始在电话会议上)
<?php
session_start();
session_unset();
session_destroy();
header('location: ./');
?>
它似乎很明显,但仅仅是明确的,当有人登录时,你强迫他们去logout.php页面? – Aust
2012年,任何人都有自己的理由写这种代码吗? – hobbs