将 PHP 数据库值直接保存在会话数组中是否安全?

Is it safe to save PHP Database values directly in Session Array?

我想知道在 PHP 中对 mySQL 进行数据库操作时,将所有数据库值保存在会话数组中是否真的安全,如下所示

$query = "select * from `users` where `mails` = ? and passx= ? ";
$result = DB::instance()->prepare($query)>execute
             (array($m,$s))->fetchAll();
foreach($result as $row){
   $user[] = $row;
   $_SESSION['user'] = $user;
}

恐怕所有数据库列名都可以在会话数组中使用。如果还有其他方法请告诉我。

是的,$_SESSION 数组是私有的,永远不会向用户显示,除非 php 配置为将会话文件保存在可公开访问的位置或服务器上存在安全漏洞。但是,会话可能会被用户窃取,其他人可以使用某些特定方法登录。

阅读有关如何防止会话固定的信息 here

还相关:Where is data stored in a session?

顺便说一句,您可以使用 reset() 而不是 foreach() 来 return 数组中的第一个键。

简而言之,如果您不 运行 围绕 var_dumping $_SESSION,或者对从 $_SESSION 分配的数据管理不当,那么对于$_SESSION 被客户端拦截。它仅存储在服务器上。

即使会话被劫持(它有其自身的一系列问题和顾虑),也不意味着 $_SESSION 的内容已完全暴露。