$ _SESSION直到几次刷新或等待才更新

时间:2017-02-01 15:22:52

标签: php ajax session

所以当我登录并执行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;
}

2 个答案:

答案 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)

所以我测试了关闭缓存,然后它工作了。已经和我的主持人谈过了,他们认为这是最终的,而不是我的。