不会取消设置PHP$_SESSION变量


PHP $_SESSION variable will not unset

很抱歉有一个重复的问题,我在这个论坛上看到了一些,但没有一个回复对我有效…

我正在使用php会话构建一个基本的登录,这是我在的新手

login.php验证html登录表单并开始会话,设置变量:$_SESSION['login']$_SESSION['id]

则需要有效登录的每个页面使用CCD_ 3,该CCD_。问题是当我注销时,我设置的两个会话变量都不会被取消设置。

现在,我的logout.php文件使用了几乎所有的方法来销毁我在网上找到的变量,但没有人能真正做到这一点

因此,每当我注销时,我仍然可以访问"私人"页面。

另请注意:我在没有会话名称的情况下尝试过,例如:session_start();,但它不起作用,所以现在我使用session_start("user");

另请注意:我没有使用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');}

注销.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]);

令人惊讶的是,在之后,您首先取消了对会话的唯一引用。直接从手册:

注意

不要用unset($_SESSION)取消设置整个$_SESSION,因为这将禁用通过$_SESSION超级全局注册会话变量。

http://php.net/manual/en/function.session-unset.php

您正在取消设置$_SESSION,因此您对超级全局$_SESSION的其他数组的取消设置不会注册,使它们仍在浏览器中的临时cookie中。如果要删除所有会话变量,请改用session_unset()。否则,不要取消设置会话全局,而是取消设置要删除的每个值。

我的工作示例(注意,您必须在调用中启动)

<?php
    session_start();
    session_unset();
    session_destroy();
    header('location: ./');
?>