我正在开发自己的应用程序,需要用户登录.所有用户和密码(加密)都存储在数据库中.当用户尝试登录时,它会在数据库中搜索用户名和密码.如果一切正常,那么我存储username在$_SESSION["username"]用户role的(管理员,作者等)$_SESSION["role"]和用户website的$_SESSION["website"](我需要的网站上进行存储,因为应用程序就像是"多点" -我的一个应用托管在客户端主机,但管理是我服务器).
我读过这个用户可以在PHP中改变$ _SESSION的值吗?我不明白 这种方法是安全的(存储数据,如果用户登录)$_SESSION?
用户可以更改会话内容吗?(例如,如果用户已登录并且$_SESSION["website"]是"example.com",用户是否可以将会话更改$_SESSION["website"]为"example.org"以破坏其他网站?如果是,则如何避免或者会话的安全替代方案是什么?).
请告诉我什么是会话劫持,这怎么会影响我的网站,以及如何使session_id动态改变?
非常感谢!
kd0*_*807 10
$ _SESSION保存在服务器中,因此用户无法修改它(会话劫持除外)
Session()是服务器端,如@ kd0807所述.有关Session Hijacking && Fixation的更多信息:
旁注...随着变量的数量,我推荐一个数组用于session ['user'].例....
$_SESSION['user'] => Array(
'userid'=> '123',
'username'=> 'some_joe',
'role' => 'customer', // user, customer, admin, moderator etc.
'website' => 'http://www.example.com'
);
// reading variables from array
$userid = $_SESSION['user']['userid'];
$username = $_SESSION['user']['username'];
// etc. etc.
Run Code Online (Sandbox Code Playgroud)
这是我使用的3个非常简化的函数.
// determine if session has started
Function HasSessionStarted() {
$result = false; // default to false
// Check if session has started
IF ((session_status() == PHP_SESSION_NONE) || (session_id() == '')) {
$result = true;
}
return $result;
}
// Set a session value
Function Set_Session($name, $value) {
/* @params value: can be a string or an array */
$new_session = HasSessionStarted(); // Check Session Status
IF ((isset($name)) && (isset($value))) {
IF ($new_session) { session_start(); }
$_SESSION[$name] = $value;
IF ($new_session) { session_write_close(); }
}
}
Function Unset_Session($name) {
$new_session = HasSessionStarted(); // Check Session Status
IF (isset($_SESSION[$name])) {
IF ($new_session) { session_start(); }
unset($_SESSION[$name]);
IF ($new_session) { session_write_close(); }
}
}
Run Code Online (Sandbox Code Playgroud)