【问题标题】:PHP session start not working?PHP会话开始不起作用?
【发布时间】:2014-02-13 06:42:18
【问题描述】:

我正在制作一个允许用户登录的网站,所以当我登录时它会登录,但是如果我刷新页面,会话就会结束?我知道它不应该这样做。基本上我的问题是我的页面在刷新页面时破坏了会话。 任何帮助将不胜感激!

这是我的主要登录代码:

if(isset($_POST['username'])&&isset($_POST['password'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $password_hash = md5($password);

    if (!empty($username)&&!empty($password)) {
        $query = "SELECT * FROM employees WHERE username = '$username' AND password = '$password_hash'";
        $query_run = mysql_query($query);
        $mysql_num_rows = mysql_num_rows($query_run);

        if ($mysql_num_rows == 0) {
            echo 'Unable to log in, username and/or password does not match!'.'<br><br>';
            echo '<a href = "#">Try Again!</a>';
        } else if ($mysql_num_rows == 1) {
            $user_id = mysql_result($query_run, 0, 'id');
            $first_name = mysql_result($query_run, 0, 'firstname');
            $last_name = mysql_result($query_run, 0, 'lastname');
            $user_name = mysql_result($query_run, 0, 'username');
            $pass_word = mysql_result($query_run, 0, 'password');
            $email = mysql_result($query_run, 0, 'email');
            $grade = mysql_result($query_run, 0, 'Security Clearance');
            $_SESSION['user_id']=$user_name;
        }
    }
}

这是我的 core.php

    ob_start();
session_start();

function loggedin() {
    if(isset($_SESSION['user_id'])&&!empty($_SESSION['user_id'])) {
        return true;
    } else {
        return false;
    }
}

这是我的索引页面(用户登录时看到的页面)

    require 'core.php';
    require 'connect.inc.php'; 
    // The page to connect to my MySQL db
include 'main_login.inc.php';

    if (loggedin()) {
    // if logged in : do stuff  
    }
} else { 
    // if its not logged in : redirect
    // If User Is Not Logged: Redirect To Jamie Co Home
    header('Location: #');
}

【问题讨论】:

  • 您的所有文件中都包含session_start(); 吗?
  • 旁注:您正在使用已弃用的 mysql_* 函数以及使用 md5 进行密码存储。强烈建议不要同时使用这两种方法,渲染您的代码Open to SQL injection
  • 这行也让我挑眉WHERE username = '$username' OR email = '$username' 为什么有两个$username 实例?您可能打算使用WHERE username = '$username' OR email = '$email',这似乎是最可能的原因,或者部分原因。
  • 他似乎想使用用户名或电子邮件作为用户名登录
  • 我知道这一点,但这行没有意义 WHERE username = '$username' OR email = '$username' 因为有一个名为 $email @milo5b 的变量 --- 我非常怀疑用户名和电子邮件是两列都一样。

标签: php session authentication login web


【解决方案1】:

我通过将会话更改为令牌解决了这个问题,我不确定为什么会这样,但确实有效!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2013-02-09
    • 2014-02-08
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    相关资源
    最近更新 更多