当前位置: 首页 > 知识库问答 >
问题:

我的PHP不会记录我的$\u会话

华欣荣
2023-03-14

所以我正在为PHP建立一个网站

<?php  
if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Username'])) {   
    echo "<h1>Member Area</h1>"; 
    echo "<p>Thanks for logging in! You are <b>" . $_SESSION['Username'] . "</b> and your email address is <b>" . $_SESSION['EmailAddress'] . "</b>.</p>";    

} elseif(!empty($_POST['username']) && !empty($_POST['password'])) {  
    $username = mysql_real_escape_string($_POST['username']);  
    $password = md5(md5(mysql_real_escape_string($_POST['password'])));  

    $checklogin = mysql_query("SELECT * FROM users WHERE Username = '".$username."' AND Password = '".$password."'");  

    if(mysql_num_rows($checklogin) == 1) {  
        $row = mysql_fetch_array($checklogin);  
        $email = $row['EmailAddress'];  

        $_SESSION['Username'] = $username;  
        $_SESSION['EmailAddress'] = $email;  
        $_SESSION['LoggedIn'] = 1;  

        echo "<center>";
        echo "<h1>Success</h1>";  
        echo "<p>We are now redirecting you to the member area.</p>";  
        echo "<meta http-equiv='refresh' content='2;login.php' />";
        echo "</center>";  
    } else {  
        echo "<h1>Error</h1>";  
        echo "<p>Sorry, your account could not be found. Please <a href=\"login.php\">click here to try again</a>.</p>";  
    }  
} else {  
    echo "<center>";
    echo "<h1>Login</h1>";
    echo "<p>Thanks for visiting! Please either login below, or <a href=\"register.php\">click here to register</a>.</p>";
    echo "<form method=\"post\" action=\"login.php\" name=\"loginform\" id=\"loginform\">";
    echo "<label for=\"username\">Username:</label><input type=\"text\" name=\"username\" id=\"username\" /><br />";
    echo "<label for=\"password\">Password:</label><input type=\"password\" name=\"password\" id=\"password\" /><br /> "; 
    echo "<input type=\"submit\" name=\"login\" id=\"login\" value=\"Login\" />";
    echo "</form>";
    echo "</center>";
}  
?>

因此,基本上,页面加载并检查用户是否已登录,如果已登录,则加载成员区域。如果没有,它会检查用户是否正在尝试登录,如果没有,它会显示登录表单。我的问题是,每次我或其他人尝试登录时,页面都会重新加载,但不会将他们带到“成员”区域,而是将他们带回到登录表单。。。另外,在文档的顶部有一行:

编辑:注册用户的代码位于不同的php文件中。再一次,基地。带有session_start()的php文件 包含在文档的顶部:if(!empty($\u POST['username'])

    $checkusername = mysql_query("SELECT * FROM users WHERE Username = '".$username."'");  

    if(mysql_num_rows($checkusername) == 1) {  
        echo "<h1>Error</h1>";  
        echo "<p>Sorry, that username is taken. Please go back and try again.</p>";  
     } else {  
        $registerquery = mysql_query("INSERT INTO users (Username, Password, EmailAddress) VALUES('".$username."', '".$password."', '".$email."')");  
        if($registerquery) {  
            echo "<h1>Success</h1>";  
            echo "<p>Your account was successfully created. Please <a href=\"login.php\">click here to login</a>.</p>";  
        } else {  
            echo "<h1>Error</h1>";  
            echo "<p>Sorry, your registration failed. Please go back and try again.</p>";      
        }         
     }  
} else {  

   echo "<h1>Register</h1>";

   echo "<p>Please enter your details below to register.</p> "; 

    echo "<form method=\"post\" action=\"register.php\" name=\"registerform\" id=\"registerform\">";
    echo "    <label for=\"username\">Username:</label><input type=\"text\" name=\"username\" id=\"username\" /><br /> "; 
    echo "    <label for=\"password\">Password:</label><input type=\"password\" name=\"password\" id=\"password\" /><br />  ";
    echo "    <label for=\"email\">Email Address:</label><input type=\"text\" name=\"email\" id=\"email\" /><br />";  
    echo "    <input type=\"submit\" name=\"register\" id=\"register\" value=\"Register\" />"; 
    echo "</form>";   
}  
?>

共有3个答案

司健柏
2023-03-14

对于你想把会话转移到的每一页,你必须这样做

session_start();

即使会话已经创建。

假设您想要一个注销页面,当您打算在类似注销的页面上注销用户时。php,您必须具备:

session_start();
session_destroy();

session_start();是破坏会话所必需的

冉丰茂
2023-03-14

始终确保session\u start()也位于所有其他相关页面的顶部。我会使用isset来代替!空的

session_start();
if(isset($_SESSION['LoggedIn']) && isset($_SESSION['Username'])) {
干宏邈
2023-03-14

你好像错过了一个机会

session_start()

在php脚本的顶部

 类似资料:
  • 嗨,当我使用Selenium IDE记录一些测试时,我遇到了一个以前没有显示的奇怪问题。 > 打开Selenium IDE时,它不会自动获取url。 这是关键问题:一旦我停止录制或播放也会停止录制的测试用例,当我再次单击录制按钮时,它不再记录任何额外的操作。 我不确定这是Selenium IDE的问题还是Firefox的问题。我使用的是Selenium IDE 1.9.1和Firefox 17,当

  • 问题内容: 我一直对会话在内部的工作方式感兴趣,但是我对C的知识很少(并且不确定在PHP源代码中的位置)。 这是我目前对会话的了解: 当您启动会话时,将为用户分配一个会话ID,该ID存储在cookie中。 会话数据保存(通过)后,将与相关的会话ID和到期时间一起存储在文件系统中。 它是否正确?另外,创建会话ID的方法是什么?我认为这是基于时间的,但是如果两个用户同时发送请求该怎么办?内部采用什么方

  • 我有一台远程计算机,正在尝试使用以下命令登录postgres数据库(通过

  • 目前,在我们的spring boot应用程序中,我们基于HeaderHttpSessionStrategy(基于会话的身份验证)对用户进行身份验证。尝试添加remember me功能,但是spring没有将用户存储到persistent_logins,或者cookie也没有在客户端创建。 我已经补充了 我们使用Angular 6作为前端客户端,所以在认证endpoint的Post方法中发送reme

  • 我有一个启用了Spring安全的项目。我已经使用运行良好的登录表单实现了记住我。但是我在登录表单上也有来自google/facebook的社交登录,它们运行良好。问题是他们不记得用户。有没有办法设置类似的“记住我”功能? 正常登录页面的当前spring配置:

  • 我正在尝试编写一个Java代码,它可以ssh到Unix服务器并重置用户密码。所以我尝试实现SO中的一些代码。 如。 通过JavaJSch通过ssh向远程服务器发送命令 从字符串中获取命令(密码)并设置为InputStream到Java(JSCH)中的Unix服务器 使用JSch,我按照此链接获取重置用户密码的正确命令。 当我试着运行这段代码时,它似乎没有重置用户的密码。因此,我尝试直接从Unix的