PHP:页面重新加载或刷新后销毁$ _SESSION

My session is not working correctly, its unset after when I reload the url, but not when I refresh the page using browser refresh button, it sent again form information to browser , says Confirm Form Resubmission and session still remain, but when I press enter in the browser url, the session gone.

here is my Code

UPDATED and complete php fil code

<?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>

if I put my this $AdminId = $_SESSION['adminid']; $Admin = $_SESSION['admin']; variables on the top of code with session_start()

the session isn't set on first time submit the form, you have to submit form again or just refresh the page.and also my onClick="logout()" not working. it has function,

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

any one cane help me out in this situation?

any help would be appreciated.

many thanks in advance.

dpdp42233
dpdp42233 这就是我做的?
大约 6 年之前 回复
dongsaohu6429
dongsaohu6429 使用谷歌搜索“初学者的PHP登录脚本”,以更好地了解应该如何做。不要对社区生气;)
大约 6 年之前 回复
dongtaijiao7140
dongtaijiao7140 这是什么意思?
大约 6 年之前 回复
doudiyu1639
doudiyu1639 首先,仔细查看您的HTML代码,特别是在<?phpif(!$Admin&&!$AdminId)行周围:?>您可能遇到某些情况,您的表单未正确关闭或其他情况下嵌套表单不建议。
大约 6 年之前 回复
dql7588
dql7588 我应该在这里发布完整的php文件代码吗?如果是,那么告诉我它是否难以理解。
大约 6 年之前 回复
dt20081409
中国通信 我真的不了解自己。
大约 6 年之前 回复
douzhao5656
douzhao5656 我知道,但有什么区别?如果按F5,重新加载按钮或在地址栏中单击Enter,则无关紧要。在每种情况下都会提出新的请求。
大约 6 年之前 回复
donglanche9257
donglanche9257 当我进入浏览器地址url栏,然后按回车键,其未设置,但是当我按下浏览器刷新/重新加载按钮时。
大约 6 年之前 回复
dqmgjp5930
dqmgjp5930 你是什​​么意思“当我重新加载网址时它未设置,但是当我使用浏览器刷新按钮刷新页面时没有”?
大约 6 年之前 回复
dousu8456
dousu8456 不,但检查会话,它正常工作。
大约 6 年之前 回复
dongyouji7022
dongyouji7022 您是否尝试将用户信息存储在cookie中,并根据会话检查cookie?
大约 6 年之前 回复
doushao1087
doushao1087 好的,对不起,道歉。我不是故意说的。
大约 6 年之前 回复
dsnnvpobaljihv3490
dsnnvpobaljihv3490 显然我很难理解你,并且不理解你在页面中看起来像什么。告诉我“仔细看”并不具有建设性。
大约 6 年之前 回复
duangan9251
duangan9251 不,只是看得更仔细
大约 6 年之前 回复
dpw30157
dpw30157 您的$welcome变量仅在帖子上设置。也许这就是你所缺少的?
大约 6 年之前 回复
duanmen1887
duanmen1887 只是看得更仔细,它有
大约 6 年之前 回复
ds342222
ds342222 你是如何确认会议中的内容的?这里是否还有一些你没有发布的代码?我可以看到一些echo语句可能会在表单提交时触发,但如果没有post数据,那里就没有回声。
大约 6 年之前 回复

1个回答



WordPress似乎没有调用 session_start()</ code>,因为它想要无状态并且如果 register_globals </ code>已定义,它会自动销毁你的 $ _ SESSION </ code> </ p>

在这里阅读更多内容: http://www.thinkingoutloud.co.za/content/20091012/php_wordpress_and_session </ p>

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

展开原文

原文

WordPress doesn't appear to call session_start() because it wants to be stateless and if register_globals is defined, it automatically destroys your $_SESSION

Read more here: http://www.thinkingoutloud.co.za/content/20091012/php_wordpress_and_session

Here you can find a plugin for WP which makes it possible to use session variables: https://wordpress.stackexchange.com/questions/32646/how-to-use-my-own-custom-session-value-in-wordpress/72744#72744

doulanli6146
doulanli6146 这是,pastebin.com/kXYVNPPa
大约 6 年之前 回复
dqr6434
dqr6434 好的,让我这样做
大约 6 年之前 回复
dth20986
dth20986 现在会话工作正常,我把我的$ AdminId = $ _SESSION ['adminid']; $ Admin = $ _SESSION ['admin']; 在我的代码的顶部与session_start();.
大约 6 年之前 回复
duanjiong1952
duanjiong1952 在Pastebin上发布你的代码,让我来看看。
大约 6 年之前 回复
duanjiagu0655
duanjiagu0655 好了,现在我已经做了一些修改,但是为什么我要提交表格两次,为什么会这样? 直到我不再提交表单按钮,或刷新页面。 页面没有登录
大约 6 年之前 回复
douxunwei8259
douxunwei8259 如果我推出我的$ AdminId = $ _SESSION ['adminid']; $ Admin = $ _SESSION ['admin']; 从if($ username)语句到顶部,我必须提交表单两次才能登录。 这是怎么回事?
大约 6 年之前 回复
dpchen2004
dpchen2004 isset()检查变量是否已设置并返回布尔值,在此处阅读更多内容。 那么你正在做的是检查变量是否设置。 如果未设置(声明) - 您声明它。 如果已经设置(声明),请不要更改它。 因此,当您第一次设置会话变量时,第二次加载页面时不会覆盖它。
大约 6 年之前 回复
doutan1875
doutan1875 这是什么意思?
大约 6 年之前 回复
dongwalun2507
dongwalun2507 您可以尝试将所有会话声明放在if(!isset($ _ SESSION ['example'])){$ _SESSION ['example'] =“example”; 确保你没有覆盖你的会话变量。
大约 6 年之前 回复
dongshi9719
dongshi9719 我在我的另一个文件和同一目录中尝试了你的代码,它的工作完美。 所以有什么问题?
大约 6 年之前 回复
doutou7286
doutou7286 我的会话工作正常,因为我应用的条件被批准,似乎会话功能正常。这里这意味着如果设置会话,则显示此表单。 <?php if(!$ AdminId &&!$ Admin):?> <form name =“messageBoxSignInForm”id =“messageBoxSignInForm”onSubmit =“return false”> <input type =“submit”id =“messageBoxSignIn”value =“ 登录进入聊天“> </ form>,这是有效的。
大约 6 年之前 回复
douwu5009
douwu5009 您是否尝试过创建新文件来测试会话? 看起来像这样:<?php session_start(); $ _SESSION ['test'] =“我的会话确实有效!”; if(isset($ _ SESSION ['test'])){echo $ _SESSSION ['test']; } else {echo“我的会话无效!”; 然后你可以看到会话是否与你的本地php配置一起使用,或者上面的代码是否包含错误。
大约 6 年之前 回复
douhunbei0166
douhunbei0166 我改变了目录路径,和它一样。
大约 6 年之前 回复
dopq87915
dopq87915 抱歉。 看到注销功能并假设它是WP。 您可以尝试为session_save_path('/ home / example.com / sessions')等会话设置保存路径; 获得777许可。 或者您可以尝试创建一个新文件,以测试会话是否真的无效或您的逻辑在上面的代码中是不正确的。
大约 6 年之前 回复
douwu7168
douwu7168 我没有在WordPress中使用它,它在localhost中,而WordPress目前无法正常运行。
大约 6 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐