我最近经常开始做的一件事是在任务开始时检索一些数据并将其存储在$ _SESSION ['myDataForTheTask']中.
现在这样做似乎很方便,但我对使用这种方法的性能,安全风险或类似情况一无所知.这是经常由具有更多专业知识的程序员完成的事情还是更多的业余事情?
例如:
if (!isset($_SESSION['dataentry'])) { $query_taskinfo = "SELECT participationcode, modulearray, wavenum FROM mng_wave WHERE wave_id=" . mysql_real_escape_string($_GET['wave_id']); $result_taskinfo = $db->query($query_taskinfo); $row_taskinfo = $result_taskinfo->fetch_row(); $dataentry = array("pcode" => $row_taskinfo[0], "modules" => $row_taskinfo[1], "data_id" => 0, "wavenum" => $row_taskinfo[2], "prequest" => FALSE, "highlight" => array()); $_SESSION['dataentry'] = $dataentry; }
小智.. 19
井会话变量实际上是访问者在网站上的整个时间内可用这些变量的唯一方式(并且可能是最有效的),用户没有真正的方法来编辑它们(除了你的漏洞利用之外)代码,或在PHP解释器中)所以它们是相当安全的.
这是存储可由用户更改的设置的好方法,因为您可以在会话开始时从数据库中读取一次设置,并且它可用于整个会话,如果设置,您只需要进行进一步的数据库调用当然,正如您在代码中显示的那样,找出设置是否已存在或是否需要从数据库中提取它们是微不足道的.
我无法想到安全存储临时变量的任何其他方式(因为cookie很容易被修改,在大多数情况下这是不可取的)所以$ _SESSION将是要走的路
井会话变量实际上是访问者在网站上的整个时间内可用这些变量的唯一方式(并且可能是最有效的),用户没有真正的方法来编辑它们(除了你的漏洞利用之外)代码,或在PHP解释器中)所以它们是相当安全的.
这是存储可由用户更改的设置的好方法,因为您可以在会话开始时从数据库中读取一次设置,并且它可用于整个会话,如果设置,您只需要进行进一步的数据库调用当然,正如您在代码中显示的那样,找出设置是否已存在或是否需要从数据库中提取它们是微不足道的.
我无法想到安全存储临时变量的任何其他方式(因为cookie很容易被修改,在大多数情况下这是不可取的)所以$ _SESSION将是要走的路
$ _SESSION机制正在使用cookie.
对于Firefox(也许是新IE,我没有检查自己),这意味着会话在打开的选项卡之间共享.这不是你默认的预期.这意味着会话不再是"特定于单个窗口/用户的东西".
例如,如果您打开了两个选项卡来访问您的站点,而不是使用第一个选项卡以root身份登录,则您将获得另一个选项卡的root权限.
这真的很不方便,特别是如果你编写电子邮件客户端或其他东西(如电子商店).在这种情况下,您必须手动管理会话或在URL中引入不断重新生成的密钥或执行其他操作.