什么是$ _SESSION以及如何在PHP中保护SESSION名称

时间:2016-03-31 04:28:57

标签: php session

我的会话在登录成功后开始,我真的不知道我的SESSION价值有多安全

我的会话值是user name,这是我的代码

<?php
require_once('includes/config.php');
if ($user->is_logged_in()) {
    header('Location: signup.php');
}
if (isset($_POST['submit'])) {
    $username = filter_input(INPUT_POST, 'username');
    $password = filter_input(INPUT_POST, 'password');
    if ($user->login($username, $password)) {
        $_SESSION['username'] = $username;
        header('Location: index.php');
        exit;
    } else {
        $error[] = 'Wrong username or password or your account has not been activated.';
    }
}
?>

这是我的功能

private function get_user_hash($username){  
        try {
            $stmt = $this->_db->prepare('SELECT password FROM members WHERE username = :username AND active="Yes" ');
            $stmt->execute(array('username' => $username));
            $row = $stmt->fetch();
            return $row['password'];
        } catch(PDOException $e) {
            echo '<p class="bg-danger">'.$e->getMessage().'</p>';
        }
    }
    public function login($username,$password){
        $hashed = $this->get_user_hash($username);
        if($this->password_verify($password,$hashed) == 1){
            $_SESSION['loggedin'] = true;
            return true;
        }   
    }

现在我需要知道$_SESSION

的安全性

以及如何保护我的$ _SESSION值

1 个答案:

答案 0 :(得分:1)

首先,深入了解会话如何在PHP中运行是很有价值的。当您运行session_start()时,PHP会为当前访问者注册一个ID,并允许您开始存储/接收链接到会话ID的信息,例如:

session_start(); // Registered visitor ID on server "B3D4IUC86"
$_SESSION['password'] = "test1234"; // Stores password for visitor "B3D4IUC86"
echo $_SESSION['password']; // Retrieves 'password' index for visitor "B3D4IUC86"

最佳做法是不要将安全/未加密的数据直接存储在用户的计算机上,因为这些数据可以在传输中被拦截或直接访问。而是存储一个ID,您可以在您的机器上查找并在内部查找信息。这也会(略微)提高网络传输速度,因为您没有传输所有数据,只有一个可以查找的简单ID。