【发布时间】:2019-08-30 11:18:06
【问题描述】:
我正在制作一个带有记住我选项的身份验证系统。一切正常,除了一件事:当我不选中记住我复选框时,它让我保持连接,即使在重新启动我的导航器甚至我的计算机之后也是如此。当 cookie 未设置时,会话变量保持不变。
我已经尝试了很多东西,但是重启一切后会话变量仍然不正常。
这是我的帐户页面代码:
if (!session_id()) {
session_start();
}
$secondDB = new wpdb('XXX', 'XXX', 'XXX', 'XXX');
$allCustomers = $secondDB->get_results("SELECT * FROM client");
if (!isset($_COOKIE["connectedUser"])) $_COOKIE["connectedUser"] = false;
if ($_COOKIE["connectedUser"]=='null') $_COOKIE["connectedUser"] = false;
echo "Cookie : ".$_COOKIE["connectedUser"]."<br>";
echo "Session : ".$_SESSION["connectedUserID"]."<br>";
if($_COOKIE["connectedUser"] != false && !isset($_SESSION["connectedUser"]))
{
$_SESSION["connectedUserID"] = $_COOKIE["connectedUser"];
}
if(isset($_SESSION["connectedUserID"]))
{
foreach($allCustomers as $customer)
{
if($customer->client_id == $_SESSION["connectedUserID"])
{
foreach($customer as $key=>$value) {
echo "<strong>".$key." : </strong>".$value."<br>";
}
}
}
echo "<br>";
echo "<a href=\"http://numerisat.fr/deconnexion/\">Log out</a>";
} else {
// AUTHENTIFICATION
echo "<form action=\"\" method=\"POST\">";
echo "<label for=\"username\">Login :</label>";
echo "<input type=\"text\" name=\"username\" required/>";
echo "<label for=\"password\">Password :</label>";
echo "<input type=\"password\" name=\"password\" required/>";
echo "<label for=\"remember\">Remember me</label>";
echo "<input type=\"checkbox\" name=\"remember\"/>";
echo "<input type=\"submit\" name=\"valider\" value=\"Log in\">";
echo "</form>";
$authResult = "";
if(!empty($_POST["username"]) && !empty($_POST["password"]))
{
foreach($allCustomers as $customer) {
if($customer->client_username == $_POST["username"])
{
if($customer->client_password == md5($_POST["password"]))
{
$_SESSION["connectedUserID"] = $customer->client_id;
if($_POST["remember"] == "on")
{
setcookie("connectedUser", $_SESSION["connectedUserID"], time()+3600*24*15, "/");
}
header('Location: http://numerisat.fr/espace-client/');
} else {
$authResult = "Invalid login or password. Please try again.";
}
} else {
$authResult = "Invalid login or password. Please try again.";
}
}
echo $authResult;
}
}
这是我的注销代码:
if (!session_id()) {
session_start();
}
unset($_COOKIE["connectedUser"]);
setcookie("connectedUser", false, time()-3600, "/");
unset($_SESSION["connectedUserID"]);
session_destroy();
header("Location: http://numerisat.fr/espace-client/");
我想要的是用户可以在离开导航器时选择是否保持连接。目前,无论他们是否愿意,它始终让他们保持联系。
您对这个问题的来源有任何解释吗?我有点迷路了。谢谢!
【问题讨论】:
-
在调用 session_destroy() 后尝试将 $_SESSION 变量转储到注销代码中以检查其是否正确销毁。
-
$_SESSION 变量返回 array(0) { } 。在帐户页面上,我显示(带有回显)cookie 和会话变量,会话变量永远不会被删除,而 cookie 是。
-
mm...这很奇怪..您是否在帐户页面以外的任何页面中设置 $_SESSION 变量?
-
“一切正常” - 真的……?看起来我只需要知道您系统中用户的 ID,以便能够“登录”作为该用户,只需将用户 ID 作为 cookie 的值发送@ 987654323@.
-
不,我与会话变量交互的唯一代码是这两个代码 sn-ps。这就是为什么我觉得这很奇怪。
标签: php wordpress variables session cookies