抛砖引玉:Session和Cookie在WEB开发中的最佳实践

    从我上个转帖:Session与Cookie的区别和联系 可以看出这两个会话工具的异同点,但如何灵活应用这两个工具才是我们关注的重点!

下面我们通过现实网络中的例子来分别说明Session和Cookie在WEB开发中的最佳实践:

1.记住登录信息

    当我们注册一个网站后,下次再次浏览的时候会发现系统已经自动帮我们登录进去了(至少可以记住我们的用户名吧),省去了手动登录的环节,很神奇吧,但这到底是如何实现的呢?像这样可以持久的驻留在客户端处只能是Cookie!

    Cookie的内容主要包括:名字、值、过期时间、路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不会存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。

    但正是因为Cookie是持久化的保存在客户端,所以也带来了一定的安全隐患。黑客可以利用这一隐患劫持用户Cookie或提取重要的用户信息。这就要求我们使用Cookie时要进行必要的选择与防护:

1.)过期时间尽量短;

2.)控制Cookie的作用范围

2.)尽量保存较少的用户敏感信息;

4.)对重要的信息进行数据加密;

    当然了有时用户浏览器设置了禁用Cookie,我们这条路就走不通了,但可以对用户进行必要的提示。搜索网页的时候看到了很早以前关于关闭各网站的表现的吐槽,细节处见功夫---cookie的应用和处理

下面在推荐一些关于Cookie的技术资料:

                Cookie注意事项    Cookie个数及大小限制

2.购物车

    现在最火的、以后依然很火的一定是电商!可以说现代人在网上买物品已经成为一种生活习惯了!电商为了抓住顾客,提高用户体验,就想方设法在细节处下工夫!购物车作为电商的必备装备,实现虽然不难,但要想达到用户最佳体验,却并不容易!

    (1)使用Session实现

    如果使用session实现一个简单的购物车就心满意足,那随着后期公司规模的逐渐扩大,这样的购物车势必会给你的迭代与维护工作带来极大不便!虽然这样的购物车是基于Session,但不能完全依赖于Session。当网站因业务的扩大需要在多台服务器部署时问题就来了!对于特定用户,她的第一个请求可能会被引导到一个后台服务器上,第二个请求却被引导到第二个服务器上,而两台服务器却不能共享Session信息,这是用户就会迷糊的发现:购物车里的物品一会出现,一会又消失了!

    所以最好把Session保存在应用之外的地方,这样多个数据就可以共享这些数据了,如果这个介质是持久化的,我们就不怕服务器的异常宕机了!

    (2)使用Cookie实现

    购物车里的物品一般不属于敏感数据,这样我们就可以将购物车数据存放在Cookie里。Cookie并不是仅仅由服务器端操作,JS也可以直接读写Cookie来读写。这样我们就有效的减轻了服务器端的压力了!

    (3)使用Session+数据库(缓存) 实现

    把购物车数据放在可以持久化的数据库中也是一个很好的办法,但这虽然保证了数据的稳定性,但是以牺牲数据库资源为代价的,而且读取和修改数据库都需要时间,所以此种方法也并不十分推荐。其他的方法如使用缓存,虽然可以减少IO,但却保证不了数据持久化。

    总之,使用Session+数据库的方法,应尽可能只在Session中保存尽可能简单的东西,如:字符串、数字等等。应用层面的对象放在数据库中,然后将他们的主键放入Session,需要时根据Session中的主键来查找对象。这样才能在下次迭代时不需要改动太多!

参考:

1.《Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版》p80-84

2.JS+Cookie实现健壮的购物车


      以上权当抛砖引玉,有考虑不到的地方敬请指明,这也是个学习的过程!如果您有更多WEB开发中的最佳实践,也请不吝赐教!

转载于:https://my.oschina.net/hanzhankang/blog/85403

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值