它应该算是项目开发中使用比较频繁的一个功能,用于跟踪用户相关信息的WEB应用,相对来说可以理解为一种在服务器端保存用户数据的方式,不同于其他方式的一个主要特点就是它是基于浏览器进程的(也就是说如果一个用户打开了两个浏览器窗口,可能会生成两个),默认保存在服务器上的指定目录下,具体位置可以查看PHP.INI
此图为WAMP的保存地址(); $['']++; print 'You have here '.$[''].' times.';
当你运行上述代码时,每次刷新它都会加1,但是它并不跨浏览器,也就是说如果你在新窗口中打开这个页面,访问次数就会显示为1。
PHP 能够保留用户信息的秘密在于,PHP 为每个用户设置一个 ID,并保存到用户端,因此,当用户刷新页面时,其实就是把这个 ID 传递给了服务器,然后服务器再保存用户信息,最后再把这些信息反馈给用户。默认情况下,如果用户的浏览器已经禁用该功能,那么 ID 会通过 URL 传递(此方式存在安全风险,对于重要数据应避免使用)。如何避免不通过 URL 传递呢?
可以设置PHP.INI文件只允许ID通过,将.设置为off(上图倒数第二行)。如果无法操作PHP.INI文件,可以使用PHP代码实现 ('.' , true); (); $salt = ''; $ = (str) date('W') . $salt; $token = md5($); if (!isset($['token']) || $['token'] != $token) { // for login and exit; } $['token'] = $token; ar('token', $token);
即使采取了上述措施,还是存在保存用户ID的潜在风险,攻击者可能通过ID获取用户的数据,书中采用的方法是使用d()函数每30秒更换一次id来解决这个问题,但我觉得这样比较耗资源,更好的办法是登录成功时将id和用户ip记录到服务器,如果在有效期内id和IP不一致,则提示用户重新登录。多台服务器间共享数据
很多分布式应用程序都需要多台服务器来共享一个用户的数据,这时候如果像上面说的一样把数据保存在一台服务器上的某个目录中,显然是不切实际的。 可以将数据保存到数据库中,这样多个应用程序就可以通过访问数据库来访问它了。PEAR包提供了这个功能,代码如下。PEAR的内容会在第26章介绍,这里只需要理解 'HTTP//DB.php'; $s = new er_DB('mysql://user:@/db'); ('.') or ();
为了提高性能,还采用了共享内存的方式来保存数据,书中以PHP的shmop扩展为例实现了这一点,通过实现内存共享的方案是比较常用的。对象类型的数据可以保存在 中吗?
这是书中没有提到的主题。您无法直接保存对象,但有方法可以将对象保存到服务器。您需要在保存之前序列化数据,并在检索时反序列化数据。在 Java 或 . NET 的原生 OO 语言中没有这个问题。 $["OO"] = ($); //分配值时序列化对象 $ = ($["OO"]); //获取值时序列化对象 反序列化它
扫一扫在手机端查看
-
Tags : php sessoin持久化
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。