【发布时间】:2012-08-30 18:52:46
【问题描述】:
对不起,我在这个论坛上看到了一些重复的问题,但没有一个对我有用...
我正在使用 php 会话构建一个基本登录,我是新手...
login.php 验证 html 登录表单并开始会话,设置变量:$_SESSION['login'] 和 $_SESSION['id],
然后每个需要有效登录的页面都使用require 'session.php';,它检查$_SESSION['valid'] 变量并在没有正确登录变量的情况下重定向用户。问题是当我注销时,我设置的会话变量都不会取消。
现在我的 logout.php 文件使用了几乎所有方法来销毁我已经能够在网上找到的变量,但实际上没有人会这样做。
所以每当我退出时,我仍然可以访问“私人”页面。
另请注意:我已经尝试过不带会话名称 ex:session_start();,但它不起作用,所以现在我正在使用 session_start("user");
另请注意:我没有使用 cookie。
这是我提到的文件:
登录.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');
欢迎任何和所有回复,我提前感谢您,还请注意,我是一般登录的新手,因此也欢迎任何关于加强安全性的建议。我计划让它更安全,但首先我需要启动并运行这个基本功能。
【问题讨论】:
-
这似乎很明显,但要明确一点,当有人注销时,你强迫他们去 logout.php 页面?
-
2012 年有人自己编写这种代码有合理的理由吗?
标签: php session variables unset