使用会话的正确方法?

时间:2017-11-01 07:59:05

标签: php session

我对PHP很新。

我为我的网站制作了一个登录系统,我想知道我是否以正确的方式进行此操作。在处理登录请求的login.php上,我创建了在我的站点上使用的会话变量。我想知道这是否是存储用户数据的最有效/最安全的方式。

这种方法对我来说似乎很有效。但是,我要说我需要来自另一个表的数据,不包括在我的用户表中。我如何获取该信息并将其存储到会话中?由于浏览器拥有所有这些信息,这是否会使我的用户容易受到攻击?或者我对会话的理解完全错误。

<?php
/* User login process, checks if user exists and password is correct */

// Escape email to protect against SQL injections
$email = $mysqli->escape_string($_POST['email']);
$result = $mysqli->query("SELECT * FROM users WHERE email='$email'");

if ($result->num_rows == 0) { // User doesn't exist
    $_SESSION['message'] = "User with that email doesn't exist!";
    header("location: error.php");
} else { // User exists
    $user = $result->fetch_assoc();

    if ( password_verify($_POST['password'], $user['password']) ) {

        $_SESSION['email'] = $user['email'];
        $_SESSION['user_name'] = $user['user_name'];
        $_SESSION['active'] = $user['active'];
        $_SESSION['paid'] = $user['paid'];
        $_SESSION['bitaddress'] = $user['bitaddress'];
        $_SESSION['id'] = $user['id'];
        $_SESSION['firstName'] = $user['firstName'];
        $_SESSION['lastName'] = $user['lastName'];

        // This is how we'll know the user is logged in
        $_SESSION['logged_in'] = true;

        header("location: checksum.php");
    } else {
        $_SESSION['message'] = "You have entered wrong password, try again!";
        header("location: error.php");
    }
}

2 个答案:

答案 0 :(得分:2)

你应该为会话创建一个方法 像:

function session_start(){
  session_start()
}
function session_create($key,$value){
  return   $_SESSION[$key] = $value;
}
function session_destroy(){
  session_destroy();
}

答案 1 :(得分:0)

只要使用不同的密钥,就可以存储来自多个表(或任何其他值)的数据。

会话存储在服务器端,因此您的浏览器没有此信息。但仍有漏洞,请参阅会话劫持https://www.owasp.org/index.php/Session_hijacking_attack

通常,您可以很好地使用会话。