【问题标题】:PHP Session variables aren't carrying overPHP 会话变量没有结转
【发布时间】:2012-07-13 16:11:03
【问题描述】:

我在用户登录突然停止工作时遇到了一些问题。我有一个 session_start();在需要它的每个页面的顶部,但我声明的会话变量似乎刚刚停止传递到登录页面。

我还可以在登录页面上禁用重定向和 print_r($_SESSION),这将打印相应的变量。

这是登录页面的代码:

<? session_start(); ?>
<?php include($_SERVER["DOCUMENT_ROOT"]."/_/includes/head.php"); ?>
<?php 
if (isset($_POST['submitted'])){
            $username = $_POST['username'];
            $password = $_POST['password'];
            function enc($string){
            $salt = "2@xp";
            $hash = sha1(md5($salt.$string)).md5($string).sha1(md5(md5($string)));
            return $hash;
            }
            $pass = enc($password);
            if($username&&$password){

                $query=mysql_query("SELECT * FROM `users` WHERE `username`='$username'");
                $numrows = mysql_num_rows($query);
                if ($numrows!=0){
                    while ($row = mysql_fetch_assoc($query)){
                    $dbusername = $row['username'];
                    $dbpassword = $row['password'];

                    //check to see if they match
                    if ($username==$dbusername&&$pass==$dbpassword){
                    echo ("You're in! <a href='index.php'>Home</a>");
                    $_SESSION['username'] = $dbusername;
                    session_register("username");
                    header("Location: index.php");
                    }
                    else echo ("Incorrect Password");               
                    }
                }
                else header("Location: login.php");

            }
            else echo ('Login Failed');
}

?>

这是登录时要重定向到的页面的代码:

    <?php
    session_start();
    if ($_SESSION['username']){
    echo "<section id='login'><a href='logout.php'>Logout</a></section>";
    $user = $_SESSION['username'];
    }
    else header("Location: login.php");
?>

我每次都被踢回登录页面。任何帮助都是极好的。谢谢!

【问题讨论】:

  • 你为什么使用session_register()?这已被弃用,可能会导致一些问题。
  • 您是否验证了登录时设置了 $_SESSION["username"]?尝试产生更多输出以查看失败的地方。
  • 糟糕,把 session_register() 留在里面,别胡闹了。已删除,仍无法正常工作。
  • 另外,我添加了一个 print_r($_SESSION['username']);到 login.php 并注释掉标头重定向。这将打印 propper 变量。但是添加 print_r($_SESSION['username']);在 session_start() 下;在 login.php 上没有返回任何内容。
  • 您是否启用了短标签?我注意到您的 login.php 以 session_start(); ?> 而不是

标签: php login session-variables


【解决方案1】:

对于登录/注册,我建议改用 cookie:

http://www.w3schools.com/php/func_http_setcookie.asp

【讨论】:

    猜你喜欢
    • 2012-05-25
    • 2012-06-12
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 2012-08-03
    • 2013-05-01
    • 2011-06-09
    相关资源
    最近更新 更多