[英]PHP - Managing Session - Doesnt Logout
我创建了具有必要数据库表和php的用户身份验证系统。
在我登录之前的第一次(在创建任何会话之前),每个页面上的重定向都可以正常工作(即,如果未登录,则重定向到登录页面)。
但是,一旦我用用户登录然后注销,就不会起作用。 我认为未结束会议可能是一个问题(对不起,如果错了)
这是每个页面中的一些代码
登录PHP
<?php
session_start();
$message="";
if(count($_POST)>0)
{
include('config.php');
echo $_POST['username'];
$result = mysql_query("SELECT * FROM members WHERE username='" . $_POST["username"] . "' and password = '". $_POST["password"]."'");
$row = mysql_fetch_array($result);
if(is_array($row))
{
$_SESSION["id"] = $row[ID];
$_SESSION["username"] = $row[username];
$_SESSION["password"] = $row[password];
$_SESSION["mname"] = $row[mname];
$_SESSION["fname"] = $row[fname];
date_default_timezone_set("Asia/Calcutta");
$lastlog=date("d/m/Y");
$logtime=date("h:i a");
$query = "UPDATE `members` SET `lastlogin`='$lastlog',`logintime`='$logtime' WHERE `ID`='$row[ID]'";
mysql_query($query);
$_SESSION['logged'] = TRUE;
}
else
{
echo "<SCRIPT>
alert('Wrong Username/Password or Awaiting Approval');
</SCRIPT>";
header("Location:login_failed.html");
}
}
if(isset($_SESSION["id"])) {
header("Location:member/myprofile.php");
}
?>
每页上的PHP代码
<?php
session_start();
include('config.php');
if(!$_SESSION['logged'])
{
header("Location: ../login.html");
exit;
} ?>
最后注销
<?php
session_start();
unset($_SESSION["id"]);
unset($_SESSION["username"]);
unset($_SESSION["password"]);
unset($_SESSION["mname"]);
unset($_SESSION["fname"]);
header("Location:../login.html");
?>
我的代码有什么问题吗? 我想念什么吗? 我做错了。 请帮助
谢谢大家解决了..
现在,您能告诉我在用户登录(会话存在)的情况下,如何将login.php重定向到用户主页(myprofile.php)-例如facebook,gmail等
您可以简单地使用session_destroy()来破坏所有当前会话数据,而不必在每个会话var上调用unset()
。
session_start();
session_destroy();
header("Location:../login.html");
为了获得完全的破坏力,您可能还想杀死会话cookie:
setcookie(session_name(), '', 1);
见这个问题的会话注销一个更完整的例子。
您需要取消设置$_SESSION['logged']
另外,您还应该使用字符串引用$row
变量中的键。 例如$row['username'];
。
通过error_reporting
开启E_NOTICE
级警告将对此有所帮助。
如果还没有,请重置会话登录
unset($_SESSION['logged']);
或者只是将其更改为false
$_SESSION['logged'] = false;
当您第一次直接点击地址栏中的页面时,它会向服务器发送新请求,服务器将按照代码中的内容检查现有会话。 但是注销后按返回按钮时,情况并不相同。 在这种情况下,没有任何请求要发送到服务器,而是从浏览器缓存中获取请求。 如果要禁用这种情况,则必须明确告知浏览器不要将页面存储在缓存中。 有关更多详细信息,请通过此链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.