【问题标题】:Session seems to die on Page refresh or when the page is opened in a new tab会话似乎在页面刷新或在新选项卡中打开页面时终止
【发布时间】:2015-12-18 23:15:43
【问题描述】:

在我的项目中,成功登录后,会打开一个显示用户名的页面。这很完美。但是,当我在没有注销的情况下刷新同一页面时,会话似乎被破坏并且用户名消失了。此外,如果我尝试在新选项卡中打开该页面,它会显示您需要先登录,并且会话似乎丢失或被破坏。几天前,当我实施和测试它时,代码曾经运行良好。就在今天,出现了这个问题。无法弄清楚错误或问题是什么。请帮忙。 这是代码

<?php
session_start();
error_reporting(0);
?>
<html>
<head>
    <title>Profile Test</title>
</head>
<body>
<?php 
if(1==2)
{
    $message = "Login to access the books page";    
    echo "<script type='text/javascript'>alert('$message');</script>";
    echo "<script language='javascript'>";
    echo "window.open('register.html','_self')";
    echo "</script>";
}
else
{
echo "Welcome ".$_SESSION['username'];
}
?>
<br>
<button  id="logout">Logout</button>
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $("#logout").click(function(){
            <?php session_destroy(); ?>
            window.open("index.html","_self");
        });
    });
</script>
</html>

【问题讨论】:

    标签: php session


    【解决方案1】:

    删除&lt;?php session_destroy(); ?&gt; 你正在破坏会话,所以当页面加载时没有会话。当您希望用户注销时,将用户重定向到带有 session_destroy 代码的页面。

    【讨论】:

      【解决方案2】:

      将 javascript 与 php 混合有时会导致意想不到的结果。 javascript 中的 php 将始终运行。此代码导致每次页面加载时您的会话都被销毁,因为 session_destroy() 总是被执行:

      <script type="text/javascript">
      $(document).ready(function(){
          $("#logout").click(function(){
              <?php session_destroy(); ?>
              window.open("index.html","_self");
          });
      });
      
      </script>
      

      【讨论】:

      • 最近,我发现 $_SESSION['username'] 的值在页面刷新时丢失了。这可能是什么原因???
      • session_destroy() 删除所有 $_SESSION 变量。正如 Gaurav Rai 所说,在其他地方运行该函数。
      猜你喜欢
      • 2020-12-07
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 2013-05-14
      相关资源
      最近更新 更多