繁体   English   中英

使用会话的正确方法?

[英]The correct way to use sessions?

我对 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");
    }
}

您应该为会话创建一个方法,例如:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM