1

我在我的测试网站上使用会话时遇到了一些问题(在本地 WAMP 服务器上运行它,使用 PHP php5.3.13)我检查了我的 php.ini 以确保会话实际被保存,它们是:

C:\wamp\tmp

基本上,当用户登录时它会显示,Welcome back, .$username所以当我使用用户“John”登录时,它会相应地显示。现在,当我离开登录页面并返回它时,这个会话不知何故丢失了。(是的,我在每一页的顶部都使用了 session_start)。

这是我的代码;

索引.php

<?php
    session_start();
?>
<!DOCTYPE html>
<html>
    <head>
        <title>Codecall Tutorials - Secured Login with php5</title>
        <link rel="stylesheet" type="text/css" href="style.css" />
    </head>

    <body>

        <?php include "header.php" ?>

         <div id="wrapper">
             <form method="post" action="">
             <h2>Log In</h2>
             <div id="underline"></div>
                 <ul>
                     <li>
                         <label for="usn">Username : </label>
                         <input type="text" maxlength="30" required autofocus name="username" />
                     </li>

                     <li>
                         <label for="passwd">Password : </label>
                         <input type="password" maxlength="30" required name="password" />
                     </li>
                     <li class="buttons">
                         <input type="submit" name="login" value="Log me in" class="xbutton" />
                            <input type="button" name="register" value="Forgot Password?" onclick="location.href='passrecover.php'" class="xbutton" />
                     </li>

                 </ul>
             </form>

            </div>

    </body>
</html>

<?php include "login.php" ?>

还有我的 login.php 页面:

<?php 

if($_POST){

        if(empty($_POST['username']) && empty($_POST['password'])) {
            echo 'Please enter all fields';
        }else {

        $username = $_POST['username'];
        $password = $_POST['password'];

        if($password !== $password){
            echo 'Your password is wrong';
        }else {

            $db_name = 
            $db_user = 
            $db_pass = 

            $conn = new PDO('mysql:host=localhost;dbname=XXXXX', 'XXXXX', 'XXXXX', // My bd details have been removed for this post, for security issues obviously
                array( PDO::ATTR_PERSISTENT => true )
        );

$stmt = $conn->prepare("SELECT username,password from members WHERE username = ? AND password = ?");

            $stmt = $conn->prepare("SELECT username,password FROM users WHERE username = ? AND password = ?");
            $stmt->execute(array($username, $password));

            if($stmt->rowCount() === 1 )
            {   
                $_SESSION['name']= $username;
                echo 'Welcome back '. $_SESSION['name'];
                //echo '<META HTTP-EQUIV="Refresh" Content="0; URL=usercp.php">';
            }else {
                echo 'Username or Password incorrect.';
            }           
        }
    }
}

?>

所以,当我最初登录时它显示$_SESSION['name']; 很好,但是当我移动页面并返回它时,它不再显示它。(我的其他页面也有session_start();) 我最初的假设是我的代码是错误的,或者我的 php.ini 文件没有保存任何数据。这里出了什么问题?

4

3 回答 3

2

您还需要在 login.php 上添加 session_start()

于 2013-05-11T16:49:50.637 回答
1

它不再显示的原因是当您转到另一个页面时,您不再处理该代码块。因为$_POST在常规页面加载时是空的,所以你没有回显任何内容。尝试var_dump($_SESSION);在页面顶部添加,然后加载一些内容。

在您的session_start();,

if(!empty($_SESSION['name'])) { 
   echo "Hello {$_SESSION['name']}"; 
}
于 2013-05-12T17:27:47.717 回答
0

也许您正在脚本中的某处破坏会话。

于 2013-05-11T17:42:31.560 回答