如何在单击刷新按钮后仍保持登录状态


How to stay signed in even after clicking refresh button

我是php的新手,我想添加一个功能,这样每当用户填写表单并登录时,php代码都会运行得很好,但在刷新页面后,用户必须再次填写表单。我不知道代码,也不知道进一步的信息。我尝试过谷歌搜索,但只看到了这类解决方案:

头(刷新:5,url:url);或元标签

它会自动刷新,但不会在单击刷新按钮后刷新。

这是我的php代码:

<html>
<head>
    <link rel="stylesheet" type="text/css" href="services.css"/>
    <link rel="stylesheet" type="text/css" href="bootstrap-css/bootstrap.css"/>
    <link rel="stylesheet" type="text/css" href="bootstrap-3.3.5-dist/css/bootstrap.min.css">
    <script type="text/javascript" src="validate.js"></script>
    <style>
        a{
            color: dodgerblue;
        }
        a:hover{
            color: dodgerblue;
            font-size: 101%;
        }
        span{
            font-size: 110%;
            line-height: 8px;
            font-style: bold;
            margin-left: 50px;
        }
        body{
            background-color: #F0F0F0 ;
        }
        button{
            margin-left: 15px;
        }
    </style>
</head> 
    <body link="slateblue">
        <div id="LogIn"><b>Log In</b></div><br>
        <form method="post" onsubmit="return logInPass()" action="log.php">
            <div class="col-xs-4"/>
              <label for="usr">Email:</label>
              <input id="usrEmail" name="usrEmail" type="email" class="form-control" size="25%" placeholder="sample@example.com"/>
            </div>
            <br><br><br><br>
            <div id="PasswordField" class="col-xs-4"/>
                <label for="u_pswd">Password:</label>
                <input id="u_pswd" type="password" class="form-control" size="25%" placeholder="Enter alteast 8 characters" />
            </div>
            <br><br><br><br>
            <button id="submit" name="checkout" class="btn btn-primary" type="submit" value="submit">Log In</button>
        </form>
        <br><br>
        <a href="SignUpForm.html" target="form"><span>Not a part of GameRangers? Click here for Sign Up!</span></a>
        <br>
    </body>
</html>

  <?php 
    echo "<style>body{font-family: segoe ui; font-size: 110%;}</style>";
    session_start();
    $_SESSION['username'] = $_POST['usrEmail'];
    echo"Welcome  ".$_SESSION['username']."<br><br>";
    echo "Today is ".date("Y-m-d")."<br>".date("h:i:sa")."<br>";
?>

使用sessions:

session_start();   // in top of PHP file
...
$_SESSION["userName"] = $userName;

在您的页面

session_start();
if(isset($_SESSION["userName"]) && $_SESSION["userName"] != ''){
 //redirect to logged in page
}

因为您正在使用会话来存储用户名。这个会话可以在if条件下使用,就像我在这里使用的一样:

<div id="nav1">
 <?php session_start();
            if($_SESSION['id']=='')
            {
            ?>
            <font style="font-size:16px; font-weight:bold; color:#063443;">Welcome, Guest&nbsp;&nbsp;<a href="Login.php" >SignIn</a></font>
            <?php }
            else
            { ?>
            <font style="font-size:16px; font-weight:bold; color:#063443;">Welcome, <?php echo $_SESSION['name'];?> &nbsp;&nbsp;<a href="signout.php" >SignOut</a>&nbsp;&nbsp;<a href="accinfo.php">My Account</a></font>

<?php }
?></div>

在这里,我已经将用户Id存储在会话[Id]中,这将成为显示用户登录与否的条件。

首先,在标头之前输出session_start();的位置。

将它作为第一行放在打开的<?php标记下,$SESSION中缺少下划线,而对于$SESSION['username'],它是超全局的。

  • 因此,没有录制/存储会话
  • 旁注:我真的希望这不是你的错别字

应该读作$_SESSION['username']

如果使用了错误报告,就会发出未定义变量的通知。

确保$_POST['usrEmail']也包含一个值,并且元素具有相同的name属性,并且会话在所有使用会话的页面中启动,并且没有像现在这样的拼写错误。

错误报告添加到文件顶部,这将有助于查找错误。

<?php 
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code

旁注:显示错误只能在暂存中进行,而不能在生产中进行。


如果您想在表单中保留会话值,请对输入使用三元运算符:

<input type="text" name= "usrEmail" id="usrEmail" value="<?php echo !empty(htmlspecialchars($_SESSION['username'])) ? htmlspecialchars($_SESSION['username']) : ''; ?>">

并将相同的方法应用于其他表单输入。

检查会话是否已设置且不为空。

<?php 
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
    if(isset($_SESSION["userName"]) && !empty($_SESSION["userName"]) )
    {
        // do something
    }
    else{
        // do something else
    }

使用SESSION或COOKIES存储登录状态

成功登录后,设置会话变量或cookie。

然后检查会话变量或cookie是否为isset,是否为预期值,然后让用户留在页面上。否则,重定向到登录。

同时将session_start()保持在页面的开头。


编辑以明确OP

在页面开头添加session_start()。验证用户名和密码后,如果是现有用户,请使用以下代码设置会话。

$_SESSION['u_name'] = $_POST['usrEmail'];

否则,重定向到登录页面。

然后在所有特定于用户的页面(只有登录用户才能访问的页面)上粘贴以下代码。

session_start();
if(!isset($_SESSION['u_name']))
{
   header('location:login.php?redirect='.$_SERVER['REQUEST_URI']);
   exit;
}

希望这会有所帮助。