$_SESSION['username'] 不工作

Posted

技术标签:

【中文标题】$_SESSION[\'username\'] 不工作【英文标题】:$_SESSION['username'] not working$_SESSION['username'] 不工作 【发布时间】:2014-09-20 13:38:03 【问题描述】:

这是面板登录:

<?php include('header.php'); 
    $login=mysql_query("select * from user")or die(mysql_error());
    $row=mysql_fetch_row($login);
    $level = $row[3];

    session_start();            
    if (isset($_SESSION['username']))
        if ($level == '1')
            
                header('location:admin/index.php');
            

        if ($level == '2')
            
                header('location:member/index.php');
            
    

    ?>

        <body>
        <div class="row-fluid">
            <div class="span12">
        <center>
            </br>
            </br>
            <div id="container">
                <div id="header">
                    <div class="alert alert-success"><label>Login to the System</label></div>
                </div>

                <form method="post"> 
                <table>
                    <tr>
                        <td><label>User Name</label></td>
                        <td><input type="text" id="username" name="username" placeholder="username" required></td>
                    </tr>

                    <tr>
                        <td><label>Password</label></td>
                        <td><input type="password" id="password" name="password" placeholder="Password" required></td>
                    </tr>

                    <tr>
                        <td></td>
                        <td><button type="submit" id="submit" name="submit" class="btn btn-success">Login</button></td>
                    </tr>


                </table>
                </form>

                <?php
                    if (isset($_POST['submit']))
                    $username=$_POST['username'];
                    $password=($_POST['password']);

                    $login=mysql_query("select * from user where user_name='$username' and user_password='$password'")or die(mysql_error());
                    $count=mysql_num_rows($login);

                    $row=mysql_fetch_row($login);
                    $level = $row[3];


                    if ($count > 0)

                    $_SESSION['username']=$row[1];
                        if ($level == 1)
                            
                                header('location:admin/index.php');
                            

                        if ($level == 2)
                            
                                header('location:member/index.php');
                            

                    

                    else ?>
                    <!-- <script type="text/javascript">
                        alert("Error Login! Wrong Combination of Username and Password!");
                    </script> -->
                    <div class="alert alert-error">Error login! Please check your username or password</div>
                    <?php
                    
                    ?>




            </div>


        </center>
    </div>
    </div>
        </body>
    </html>

我使用正确的信息登录,但系统没有转发到会员页面。 $_SESSION['username'] 不起作用。我尝试了所有在互联网上可以找到的解决方案,但都没有奏效。我不知道为什么这不起作用。任何帮助将不胜感激,谢谢。

我使用了这个代码:你能帮我修复它吗?非常感谢

http://vinhomegroup.com/post2/feeds.zip

【问题讨论】:

您确定设置了吗? var_dump($_SESSION); 显示了吗?你能告诉我们你设置它的代码吗? ...你有没有考虑过不先销毁会话? 你为什么要开始你的会话,破坏它,然后再开始呢?您将永远无法访问username,因为您破坏了该会话并且再也没有设置username 标题看起来像header('Location: admin/index.php');,你应该记住它不会隐式停止脚本。它的执行一直持续到exit; 或脚本结束。顺便说一句,您不能在 http 正文之后或期间发送标头。 您无法在任何输出完成后设置 http 标头,因此在您的情况下,header() 将不起作用。 【参考方案1】:

在读取变量之前,您正在销毁会话。

session_start();
session_destroy();
session_start(); 

因此,您将无法访问您的 $_SESSION 变量。

去掉上面sn-p的前两行就可以了。

【讨论】:

【参考方案2】:

你销毁会话,然后你想检查是否存在。

您必须在另一个页面处理表单,否则您发送后将不会执行session_desytroy

if (empty($_POST['submit']))
    session_start();
    session_destroy();
    session_start();  

如果你把它放入条件中,它不会在表单发送后破坏你的会话。

我个人认为ist对setdestroyset再次会话毫无意义。简单的做

session_start();

【讨论】:

【参考方案3】:
session_destroy();

在这个电话之后,$_SESSION 中什么都没有留下,这并不奇怪。

除此之外,你的逻辑还有很多非常错误的地方,我的意思是:

$login=mysql_query("select * from user")or die(mysql_error());
$row=mysql_fetch_row($login);
$level = $row[3];

您正在选择一个随机用户,$level 到底应该包含什么?

【讨论】:

我使用了这个代码:vinhomegroup.com/post2/feeds.zip你能帮我解决它吗?非常感谢【参考方案4】:

您在session_destroy(); 中破坏了您的会话

    <?php include('header.php'); 
//Where are the user details to select the user? Should not it be like?
        $sql = "select * from `user` WHERE `username ` = 'something' AND `password` = 'something' LIMIT 1";
        $login=mysql_query($sql)or die(mysql_error());
        $row=mysql_fetch_row($login);
        $level = $row[3];

    //Start a session first
        session_start();

    //Set session username here
        $_SESSION['username'] = $row[username-array-key]
            if ($level == '1')
                
                    header('location:admin/index.php');
                

            if ($level == '2')
                
                    header('location:member/index.php');
                


        ?>

【讨论】:

以上是关于$_SESSION['username'] 不工作的主要内容,如果未能解决你的问题,请参考以下文章

★★★★★提高PHP代码质量的36个技巧

ajax 跨域前后端实现

将所有 POST 数据存储在 SESSION 中

我可以将类实例存储在 $_SESSION 空间中吗?

php用户登入与注销(session)

thinkphp session保存或读取不了!!