博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抛砖引玉:Session和Cookie在WEB开发中的最佳实践
阅读量:6992 次
发布时间:2019-06-27

本文共 1734 字,大约阅读时间需要 5 分钟。

hot3.png

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

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

1.记住登录信息

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

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

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

1.)过期时间尽量短;

2.);

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

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

    当然了有时用户浏览器设置了禁用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.

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

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

你可能感兴趣的文章
静态页跨页面传值
查看>>
.net core iis配置
查看>>
C#根据屏幕分辨率改变图片尺寸
查看>>
【POJ 3585】Accumulation Degree
查看>>
Solr配置,schema.xml的配置,以及中文分词
查看>>
数字型谜题或算法小节
查看>>
drupal7权限控制之-如何访问未发表的node
查看>>
.NET:权限管理
查看>>
hadoop多文件输出
查看>>
【生成树,堆】【CF1095F】 Make It Connected
查看>>
一文详解Spring Cloud Feign重试机制
查看>>
linux下的apue.3e安装[Unix环境高级编程]
查看>>
How do I do a bulk insert in MySQL using Node.js
查看>>
Linux系统下实现SVN + Apache + SSL服务器框架的架设
查看>>
Oracle 11g数据库详细安装步骤图解
查看>>
机器学习之特征选择---特征选择算法
查看>>
嵌入式开发之hisilicon---hi3536 处理器简介
查看>>
目标跟踪之模板匹配---简单的模板匹配
查看>>
css美化网页元素
查看>>
histogram
查看>>