所以当我登录并执行location.reload()时,$ _SESSION不会更新,直到我刷新了几次或等待30-60秒。 它似乎更像是基于时间的,但无法确定。
所以我一直在检查stackoverflow,但很多问题都是通过301从非www来解决的。到www。 (我在.htaccess中所做过的。) 我还把我的session_start();在身体的顶部。
if(!isset($_SESSION['username'])): ?>
<div class="right"><span class="button menuButton dropdownTrigger" data-dropdown-id="1"><a>Logga In</a></div>
<?php else: ?>
<div class="right"><span class="button menuButton"><a>Profil</a></div>
<?php endif; ?>
这就是我刷新时应该改变的代码 它起作用只是它需要长时间/多次刷新才能实现。
$.ajax({
type: "POST",
url: "login/checklogin.php",
data: "myusername=" + username + "&mypassword=" + password,
dataType: 'JSON',
success: function (html) {
//console.log(html.response + ' ' + html.username);
if (html.response === 'true') {
//location.assign("../index.php");
location.reload();
return html.username;
} else {
$("#message").html(html.response);
}
},
error: function (textStatus, errorThrown) {
console.log(textStatus);
console.log(errorThrown);
},
beforeSend: function () {
$("#message").html("<p class='text-center'><img src='images/ajax-loader.gif'></p>");
}
});
这是我访问的php代码,它重新加载网站并返回值。
如果您需要更多信息,请随时告诉我! 提前谢谢!
重复问题的更新
它不一样,因为它无法改变页面。
使用Ed
进行更新<?php
session_start();
?>
<!doctype html>
<html>
还测试了这个并且似乎无法解决问题。
更新以显示使用$ _SESSION的位置
//If max attempts not exceeded, continue
// Checks password entered against db password hash
if (password_verify($mypassword, $result['password']) && $result['verified'] == '1') {
//Success! Register $myusername, $mypassword and return "true"
$success = 'true';
session_start();
$_SESSION['username'] = $myusername;
}
答案 0 :(得分:0)
不要将session_start()
放在if
块内。正如我在帖子的评论中多次说过的那样,您需要在 每个请求 上运行一次session_start()
一次。如果您仅在password_verify()
成功时运行它,则不会在任何其他请求上使用您的会话。那是你的问题。
来自the manual:
session_start()根据通过GET或POST请求传递的会话标识符创建会话 或恢复当前的 ,或通过cookie传递。
为了安全起见,将它作为每次加载页面时执行的第一行代码,除非你正在做一些非常花哨的东西(你不是这样)并确切知道你在做什么。
要清楚,您的代码应如下所示:
<?php
session_start(); // PUT THIS HERE
//If max attempts not exceeded, continue
// Checks password entered against db password hash
if (password_verify($mypassword, $result['password']) && $result['verified'] == '1') {
//Success! Register $myusername, $mypassword and return "true"
$success = 'true';
$_SESSION['username'] = $myusername;
}
同样,您需要确保在所有其他请求上运行session_start()
,而不仅仅是登录处理程序。
此外,您有许多“代码气味”,例如(1)使用==
进行比较,(2)与字符串'1'
进行比较而不是整数1
, (3)将变量设置为字符串'true'
。我强烈建议您在编写更多代码之前阅读phptherightway.com上的所有内容。
答案 1 :(得分:0)
所以我测试了关闭缓存,然后它工作了。已经和我的主持人谈过了,他们认为这是最终的,而不是我的。