浅谈session和cookie

来源:互联网 发布:知乎 最刺激的事情 编辑:程序博客网 时间:2024/06/05 17:38

1 cookie

  某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。(可以叫做浏览器缓存)。

  B 用途:Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是 Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入 Cookies,以便在最后付款时提取信息。

  每个浏览器都会在各自独立的空间存放cookie。因为cookie中不但可以确认用户,还能包含计算机和浏览器的信息,所以一个用户用不同的浏览器登录或者用不同的计算机登录,都会得到不同的cookie信息

  

  C 开发者利用cookie的注意事项:

建议开发人员在向客户端 Cookie 输出敏感的内容时(譬如:该内容能识别用户身份):

1)设置该 Cookie 不能被脚本读取,这样在一定程度上解决上述问题。

  2)对 Cookie 内容进行加密,在加密前嵌入时间戳,保证每次加密后的密文都不一样(并且可以防止消息重放)。

  3)客户端请求时,每次或定时更新 Cookie 内容(即:基于第2小条,重新加密)

  4)每次向 Cookie 写入时间戳,数据库需要记录最后一次时间戳(防止 Cookie 篡改,或重放攻击)。

  5)客户端提交 Cookie 时,先解密然后校验时间戳,时间戳若小于数据数据库中记录,即意味发生攻击。

 

D Cookie的传递流程

 

  Cookie是利用了网页代码中的HTTP头信息进行传递的,浏览器的每一次网页请求,都可以伴随Cookie传递,例如,浏览器的打开或刷新网页操作。服务器将Cookie添加到网页的HTTP头信息中,伴随网页数据传回到你的浏览器,浏览器会根据你电脑中的Cookie设置选择是否保存这些数据。如果不设置该属性,那么Cookie只在浏览网页期间有效,关闭浏览器,这些Cookie自动消失,绝大多数网站属于这种情况。

  多数网页编程语言都提供了对Cookie的支持。如javascriptVBScriptDelphiASPSQLPHPC#等。在这些面向对象的编程语言中,对Cookie的编程利用基本上是相似的,大体过程为:先创建一个Cookie对象(Object),然后利用控制函数对Cookie进行赋值、读取、写入等操作。

  

  

该脚本的作用就是收集Cookie文件,具体内容如下:

$info = getenv("QUERY_STRING";

//返回环境变量 varname 的值, 如果环境变量 varname 不存在则返回 FALSE

 

if ($info) {

$fp = fopen("info.txt","a");

fwrite($fp,$info."\n");

//int fwrite ( resource $handle , string $string [, int $length ] )

fwrite() 把 string 的内容写入 文件指针 $FP 处。 

handle

文件系统指针,是典型地由 fopen() 创建的 resource(资源)

 

fclose($fp);

}

  

2 session

PHP开发中对比起Cookiesession 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 session 的使用。

 

session的工作原理

1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。

2)首先使用session_start()函数,PHPsession仓库中加载已经存储的session变量。

3)当执行PHP脚本时,通过使用session_register()函数注册session变量。

4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。

 

Session响应;

当首次创建了session后,客户端会在后续的请求中将session的标识符带到服务端,服务端程序只要在需要session的时候调用 getSession,服务端就可以将对应的session绑定到当前请求,从而实现状态的保持。当然这需要客户端的支持,如果禁用了cookie而又不 采用url重写的话,session是无法保持的。

  

  

  

Session应用:

登录Java代码:

1.if(user!=null){

2.HttpSession session = request.getSession(true);

3.session.setAttribute("user",user);

4.

5.ShopCart cart = new ShopCart();

6.session.setAttribute("cart", cart);

7.response.sendRedirect("../product/products1.jsp");

8.

9.}else{

10.request.setAttribute("msg","此用户不存在");

11.this.getServletContext().getRequestDispatcher("/index.jsp").forward(request,?response);

12.}

注销JavaScript代码

  

1.HttpSession?session=request.getSession(false);

2.session.removeAttribute("cart");

3.session.removeAttribute("user");

4.session.invalidate();

5.response.sendRedirect("../index.jsp");

  

对比:

3. 性能

Cookie存储在客户端,消耗的是客户端的INPUT/OUTPUT和内存,而session存储在服务端,消耗的是服务端的资源。但是session对服务器造成的压力比较集中,而cookie很好地分散了资源消耗,就这点来说,cookie是要优于session的;

4. 时效性

Cookie可以通过设置有效期使其较长时间内存在于客户端,而session一般只有比较短的有效期(用户主动销毁session或关闭浏览器后引发超时);

5. 其他

Cookie的处理在开发中没有session方便。而且cookie在客户端是有数量和大小的限制的,而session的大小却只以硬件为限制,能存储的数据无疑大了太多。

0 0
原创粉丝点击