我只花了几个小时就设置了网站登录系统,最终我登录了,但无法注销。
我尝试使用会话名称,但仍然无法使用。/
<?php
session_start('$_SESSION['userId']');
session_unset('$_SESSION['userId']');
session_destroy('$_SESSION['userId']');
header("Location: ../../index.php?logout=success");
?>
这些是index.php标头上的Login / Logout超链接,当我注销时,显示登录内容的那一刻,然后我登录,现在卡住了注销。/
<li class="nav-item">
<?php
if (isset($_SESSION['userId'])) {
echo '<a class="nav-link" href="login/login.php">Log In</a>';
} else {
echo ' <a class="nav-link" href="login/logout.php">Log Out</a>';}
?>
</li>
这是超链接引用的注销页面。 /
<form action="includes/logout.php" method="post">
<span>
Are you sure you want to logout?
</span>
<div>
<button>
Log out
</button>
</div>
</form>
这是includes / logout.php,它执行后将带我从注销页面返回index.php,并在URL中返回“ index.php?logout = success”,但标头仍显示注销而不是登录。 /
<?php
session_start();
session_unset();
session_destroy();
header("Location: ../../index.php?logout=success");
?>
基本上,所有工作都在进行,除了会话实际停止。任何帮助将不胜感激。
编辑:我只是将所有文件上传到测试站点,然后在浏览器中的一个隐身标签页中打开了该站点,然后在手机上,它们都自动显示“登录”按钮,所以我猜问题在于此
<li class="nav-item">
<?php
if (isset($_SESSION['userId'])) {
echo '<a class="nav-link" href="login/login.php">Log In</a>';
} else {
echo ' <a class="nav-link" href="login/logout.php">Log Out</a>';}
?>
</li>
答案 0 :(得分:1)
在您的login.php中
<?php
if(isset($_GET['logout']))
{
unset($_SESSION['user_id']);
//use this if you only want the user_id session to be unset.
}
?>
答案 1 :(得分:0)
请记住,重定向后直到刷新页面后,$ _ SESSION才可用。 这意味着,如果您注销并重定向,则$ _SESSION ['userId']仍然可用,直到您再次刷新页面为止。这就是为什么您仍然可以看到的原因。 您正在发送GET参数-在页面上使用它代替$ _SESSION ['userId']:
if( isset($_GET['logout']) && $_GET['logout'] == 'success') {
// display link to log in
} else {
// display link to log out
}
通常,这些代码示例看起来有些混乱,我不会说您正确设置了登录功能。
将session_start()保留在标题的顶部,或者在真正需要它时调用它,通常只需要启动一次即可。
除此之外,请勿使用表格进行登出-使用
<a href="<logout path>"...>LOGOUT</a>
会更好。
答案 2 :(得分:0)
如果您注销后不需要任何会话变量,则遵循以下三行代码即可正常工作。
session_start();
session_destroy();
header("Location: ../../index.php?logout=success");
答案 3 :(得分:0)
session_start('$_SESSION['userId']');
session_start
must be an array, not a string的第一个(也是唯一一个)参数。
session_unset('$_SESSION['userId']');
session_unset
does not have any parameters。
session_destroy('$_SESSION['userId']');
这些都不按照您的想法去做,这可能是您遇到麻烦的根本原因。