【问题标题】:PHP: $_SESSION destroyed after page reload or refreshPHP:页面重新加载或刷新后 $_SESSION 被破坏
【发布时间】:2014-07-17 15:10:15
【问题描述】:

我的会话工作不正常,当我重新加载 url 后它没有设置,但当我使用浏览器刷新按钮刷新页面时,它再次向浏览器发送表单信息,说 确认表单重新提交会话仍然存在,但是当我在浏览器 url 中按 enter 时,会话消失了。

这是我的代码

更新完整的php文件代码

<?php session_start();
error_reporting(E_ALL ^ E_NOTICE);
require_once 'protect.php';
$logout = $_GET['logout'];

?>
<!doctype html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script src="http://www.google.com/jsapi"></script><script> google.load("jquery",'1.7'); google.load("jqueryui", "1"); </script>
<script src="js/mutate/mutate.events.js"></script>
<script src="js/mutate/mutate.min.js"></script>


<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="css/animate.min.css">
<script src="js/signinout.js" type="text/javascript"></script>
<script src="js/send_message.js" type="text/javascript"></script>
<script src="js/refresh_message_log.js" type="text/javascript"></script>

<script>
$(function(){
$('.main').mutate('scrollHeight', function(el) {
        expanded = false;
        $('#scrollHeight').text('scrollHeight changed:' + $('.main').prop("scrollHeight"));
        $('.main').stop().animate({scrollTop:$('.main')[0].scrollHeight}, 1000);
    });
})

function logout() {
    window.location.href="http://localhost/wordpress/wp-content/themes/onlinearn/chat/adminChat.php?logout=admin";
};
</script>
<meta charset="utf-8">
<title>Live Chat</title>
</head>

<body>
<?php
if ($_POST['signIn']) {
$username = $_POST['username'];
$_SESSION['username'] = $username;
require_once 'cn.php';
    if ($username) {
        $query = "SELECT * FROM users WHERE username='$username'";
        $result = mysqli_query($cn,$query);
        $numrows = mysqli_num_rows($result);
        if ($numrows == 1) {
            $row = mysqli_fetch_assoc($result);
            $dbId = $row['id'];
            $dbadmin = $row['username'];
            if ($username == $dbadmin) {
                $_SESSION['adminid'] = $dbId;
                $_SESSION['admin'] = $dbadmin;
            }
        }
        else {
            echo 'No user found.';
        }
        $AdminId = $_SESSION['adminid'];
        $Admin = $_SESSION['admin'];
        $welcome =  'Welcome <span id="loggedUser">'.$Admin.'</span>!';
    }


}
if ($logout == 'admin') {
    //session_destroy();

}
?>
    <div class="chatBox">
        <div class="user">
        <div class="chatlogo">Admin Chat</div>
        <?php if (!$Admin && !$AdminId):?>
        <form name="SignIn" id="signInForm" action="./adminChat.php" method="post" onSubmit="">
            <span class="error animated">Invalid uername</span>

            <input name="username" type="text" id="username" placeholder="Enter username" size="13px" onClick='document.username.value = "" '>
            <input name="signIn" type="submit" id="signIn" value="SING IN">
            <?php else:?>
            <form action="signout_delete_content.php" method="post" onSubmit="">
            <span class="welcome"><?php echo $welcome;?></span>
            <input type="submit" value="SIGN OUT" id="signOut" onClick="logout()">
            </form>

        </form>
         <?php endif;?>   
        </div>
        <div class="main" id="result">
        </div>
        <div class="messageBox">
        <?php if (!$AdminId && !$Admin):?>
            <form name="messageBoxSignInForm" id="messageBoxSignInForm" onSubmit="return false">
            <input type="submit" id="messageBoxSignIn" value="Sign In to Enter Chat">
            </form>
            <?php else:?>
          <form name="newMessage" class="newMessage" action="" onSubmit="return false">
            <textarea name="newMessageContent" id="newMessageContent" placeholder="Enter your message here.">Enter your message here</textarea>
            <input type="submit" id="newMessageSend" value="Send">
            <?php endif;?>
          </form>
      </div>
    </div>

</body>
</html>

如果我使用 session_start() 将我的 $AdminId = $_SESSION['adminid']; $Admin = $_SESSION['admin']; 变量放在代码顶部

第一次提交表单时没有设置会话,您必须再次提交表单或刷新页面。而且我的onClick="logout()" 无法正常工作。它有功能,

function logout() {
   window.location.href="http://localhost/wordpress/wp-content/themes/onlinearn/chat/adminChat.php?logout=admin";
};

在这种情况下,任何人都可以帮助我吗?

任何帮助将不胜感激。

非常感谢。

【问题讨论】:

  • 您如何确认会话中的内容?这里是否还有一些您没有发布的代码?我可以看到一些在表单提交时可能会触发的回显语句,但是如果没有发布数据,则其中没有任何回显。
  • 仔细看看,有
  • 您的$welcome 变量仅在帖子中设置。也许这就是你所缺少的?
  • 不,只是看的更仔细
  • 好的,对不起,我很抱歉。我不是故意的。

标签: php session


【解决方案1】:

WordPress 似乎没有调用 session_start(),因为它希望是无状态的,如果定义了 register_globals,它会自动销毁您的 $_SESSION

在这里阅读更多:http://www.thinkingoutloud.co.za/content/20091012/php_wordpress_and_session

在这里您可以找到一个可以使用会话变量的 WP 插件:https://wordpress.stackexchange.com/questions/32646/how-to-use-my-own-custom-session-value-in-wordpress/72744#72744

【讨论】:

  • 我没有在 WordPress 中使用它,它在 localhost 中,并且 WordPress 目前无法运行。
  • 对不起。看到注销功能并假设它是 WP。您可以尝试使用777 权限为session_save_path('/home/example.com/sessions'); 之类的会话设置保存路径。或者您可以尝试创建一个新文件来测试会话是否真的不起作用或者您的逻辑在上面的代码中是否不正确。
  • 您是否尝试过创建一个新文件只是为了测试会话?可能看起来像这样:&lt;?php session_start(); $_SESSION['test'] = "My sessions do work!"; if(isset($_SESSION['test'])){ echo $_SESSSION['test']; } else{ echo "My sessions are not working!"; } ?&gt; 然后您可以查看会话是否正在使用您的本地 php 配置,或者上面的代码是否包含错误。
  • 您可以尝试将所有会话声明放在if(!isset($_SESSION['example'])){ $_SESSION['example'] = "example"; } 中,以确保您没有覆盖会话变量。
  • isset() 检查变量是否已设置并返回布尔值,阅读更多here。因此,您正在做的是检查变量是否已设置。如果它没有设置(声明) - 你声明它。如果它已经设置(声明),请不要更改它。因此,当您第一次设置会话变量时,您不会在第二次加载页面时覆盖它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
相关资源
最近更新 更多