GVKun编程网logo

cookie和session的跟踪过程(cookie与session联系)

13

在这篇文章中,我们将带领您了解cookie和session的跟踪过程的全貌,包括cookie与session联系的相关情况。同时,我们还将为您介绍有关cookie和session的关系、cookie和

在这篇文章中,我们将带领您了解cookie和session的跟踪过程的全貌,包括cookie与session联系的相关情况。同时,我们还将为您介绍有关cookie和session的关系、cookie和session的加密?、cookie和session的区别、cookie和session的区别及其原理的知识,以帮助您更好地理解这个主题。

本文目录一览:

cookie和session的跟踪过程(cookie与session联系)

cookie和session的跟踪过程(cookie与session联系)

结论:   浏览器一开始发送cookie到服务器器, 如下:

如果有JSESSIONID 则获取session服务,否则新建一个session服务!并且通知浏览器保存

如下图

 

代码:

<%@ page language="java" contentType="text/html;"  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
  hell12233你好--d
  
  <%   
  Cookie cookie1 = new Cookie("ddd","2334"); // 新建Cookie
  cookie1.setMaxAge(5); // 设置生命周期为MAX_VALUE
  response.addCookie(cookie1); // 输出到客户端
	
 	 Cookie cookie2 = new Cookie("fff","jjd222");
  	//cookie2.setMaxAge(1000);  //不设置 浏览器 失效 
	 response.addCookie(cookie2);
     
 
  Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组
  String strCks="";
   if(cookies!=null){
	  for(Cookie cookie : cookies){
		  strCks=strCks+cookie.getName() +"::";// get the cookie name
		  strCks=strCks+cookie.getValue()+"--"; // get the cookie value
		}
   }
   HttpSession si= request.getSession();
   if(si==null){
	   out.print("<br>si是空值<br>");
   }
  %>
  <br> session  :  <%= si%>
  <br> session_id: <%= request.getSession().getId() %>
  <br> strCks=  <%=strCks %>
</body>
</html>

调试结果:

 

cookie和session的关系

cookie和session的关系

JS --- cookie和session

  1. 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。

  2. session存储在服务端,那么客户端上的信息如何快速与服务端匹配呢(有很多时候,当你登录过某个网站后,下次在登录的时候就不用再输入用户名和密码了,这就是cookie的作用)。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

  3. Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。

Session是在服务端保存的一个数据结构,用来跟踪(标识)用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

1,session 在服务器端,cookie 在客户端(浏览器)
2,session 默认被存在在服务器的一个文件里(不是内存)
3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
4,session 可以放在 文件、数据库、或内存中都可以。
5,用户验证这种场合一般会用 session 因此,维持一个会话的核心就是客户端的唯一标识,即 session id

cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中

以上就是cookie和session的关系的详细内容,更多请关注php中文网其它相关文章!

cookie和session的加密?

cookie和session的加密?

我现在写的前后和后台登陆大量使用了cookie和session,但是我直接就放进去了,读取也直接就读取出来了,最近听老师讲课提到cookie和session加密,我不知道现在正统做法是怎么的?是cookie和session一概都加密?
还有加密都不直接使用md5,而是复杂的加密,md5不安全吗,怎么不直接使用md5呢?


回复讨论(解决方案)

cookie 可以加密,但加密后的数据不能被 js 使用
如果提供 js 版的解密函数,那么加密就没有任何意义了

session 无需加密,因为他保存于服务器端。
如果连你自己的服务器的安全你都不能保证,干脆就不要做web开发了

MD5 不是加密,只是索引
只有可逆的编码算法才能称为加密

cookie 可以加密,但加密后的数据不能被 js 使用
如果提供 js 版的解密函数,那么加密就没有任何意义了

session 无需加密,因为他保存于服务器端。
如果连你自己的服务器的安全你都不能保证,干脆就不要做web开发了

MD5 不是加密,只是索引
只有可逆的编码算法才能称为加密

能否这样说,只要我使用了cookie我就要加密?之前我看老师是在做用户登陆记住密码做了加密。


cookie 可以加密,但加密后的数据不能被 js 使用
如果提供 js 版的解密函数,那么加密就没有任何意义了

session 无需加密,因为他保存于服务器端。
如果连你自己的服务器的安全你都不能保证,干脆就不要做web开发了

MD5 不是加密,只是索引
只有可逆的编码算法才能称为加密

能否这样说,只要我使用了cookie我就要加密?之前我看老师是在做用户登陆记住密码做了加密。

一些敏感的数据保存在本地的cookie安全起见都做一个加密过程....加密的方法有很多 最后再读取出来的时候做一个验证...

把敏感数据放在 cookie 中本身就是不妥当的,因为 cookie 数据会在网络中反复传递
即便是加了密,你也不能排除在多次传输中泄密的可能性

最好不要在cookies中加密

把敏感数据放在 cookie 中本身就是不妥当的,因为 cookie 数据会在网络中反复传递
即便是加了密,你也不能排除在多次传输中泄密的可能性

结论是什么呢?
是不要放敏感数据到cookie,那么也不用对cookie加密?

比如自动登陆,记住密码这些不是很常见的技术嘛?

说记住密码,就真的记住了密码吗?
cookie 中根本就不会出现密码!

cookie和session的区别

cookie和session的区别

1、cookie数据存放在客户的浏览器上,session数据存放在服务器上。

2、cookie不是很安全,别人可以通过分析存在本地的cookie来进行cookie欺骗,如果主要考虑到安全则使用session。

3、session会在一定时间内存放在服务器。当访问增加时,比较占用服务器性能。所以如果主要考虑减轻服务器性能负载,使用cookie。

4、 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的cookie不能超过3K。

 

总结:将登录信息等重要信息放在session,其它信息如果要保留,则用cookie保留。

cookie和session的区别及其原理

cookie和session的区别及其原理

1.为什么要有cookie/session?

  • HTTP是一种无状态的协议,为了分辨链接是谁发起的,需自己去解决这个问题。不然有些情况下即使是同一个网站每打开一个页面也都要登录一下。而Session和Cookie就是为解决这个问题而提出来的两个机制。

2.cookie/session执行流程

cookie执行流程

当你去访问服务器的时候,服务器如果想让浏览器保存点数据,这时服务器就产生一个键值对的数据(new cookie),把数据带到浏览器,浏览器会将次数据保存起来。(其底层就是通过一叫做set-cookie的响应头来实现的)。接下来当再次去访问服务器时候,浏览器会根据一定的规则将cookie带上(底层就是一个叫做cookie的请求头),这样在服务器端就可以通过方法获取这些数据.

Cookie的主要内容包括:名字,值,过期时间,路径和域(api 后面会讲)。使用Fiddler抓包就可以看见,比方说我们打开百度的某个网站可以看到Headers包括Cookie,如下:

 

key, value形式。过期时间可设置的,如不设,则浏览器关掉就消失了,存储在内存当中,否则就按设置的时间来存储在硬盘上的,过期后自动清除,比方说开关机关闭再打开浏览器后他都会还存在,前者称之为Session cookie 又叫 transient cookie(临时cookie),后者称之为Persistent cookie (持久化cookie)又叫 permenent cookie。路径和域就是对应的域名,a网站的cookie自然不能给b用。

session执行流程

客服端访问服务器,如果遇到了 getsession()方法。服务器会检查客户端是否携带了一个叫做JSESSIONID的cookie
没有携带
服务器在内存开辟一块空间(new session),同时会生成一个随机的唯一的字符串,将随机的字符串跟创建session对象关联起来( key->字符串,value->session对象)
放入在session池中,放回到客户端的时候,服务器会将字符串包装一下,new cookie("JSESSIONID",字符串),带回去给客户端
有携带:
将此cookie的中的值取出来,字符串取出来,把他当做key去session池中查找对应的session对象
找到了
根据业务逻辑操作session对象

没找到了
服务器在内存开辟一块空间(new session),同时会生成一个随机的唯一的字符串,将随机的字符串跟创建session对象关联起来放入在session池中( key->字符串,value->session对象),放回的时候,服务器会将字符串包装一下,new cookie("JSESSIONID",字符串),带回去给浏览器

sesion

存在服务器的一种用来存放用户数据的类HashTable结构。
浏览器第一次发送请求时,服务器自动生成了一HashTable和一Session ID来唯一标识这个HashTable,并将其通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。
一般这个值会有个时间限制,超时后毁掉这个值,默认30分钟。
当用户在应用程序的 Web页间跳转时,存储在 Session 对象中的变量不会丢失而是在整个用户会话中一直存在下去。
Session的实现方式和Cookie有一定关系。建立一个连接就生成一个session id,打开几个页面就好几个了,这里就用到了Cookie,把session id存在Cookie中,每次访问的时候将Session id带过去就可以识别了.

3.cookie的常用属性api
        Cookie cookie = new Cookie("name","tom"); // 新建Cookie
cookie就是键值对的数据,如果是中文不能直接设置,需要编码

Cookie cookie3 = new Cookie("realname",URLEncoder.encode("姓名","utf-8"));

        cookie.setDomain("www.baidu.com"); // 设置域名
这样设置域名的话,该cookie会被提交到www.baidu.com但是不会被提交到zhidao.baidu.com。要想都提交过去,需要这样设置cookie.setDomain(".baidu.com");

        cookie.setPath("/search"); // 设置路径   
这样设置路径,该cookie只会被提交到www.baidu.com/search路径下的页面,也就是说在www.baidu.com/aaa下的页面是获取不到该cookie的。一般cookie在某个网站里都是可用的,直接设置为/,cookie.setPath("/");

        cookie.setMaxAge(60*60*24*7); // 设置有效期
MaxAge属性单位为秒,默认为-1也就是关闭浏览器自动销毁(临时cookie)。cookie.setMaxAge(60*60*24*7); 这样设置意思是不管浏览器关闭与否,将此cookie持久化到客户端文件里保存一周。参数为正数时浏览器都会将相应的cookie做持久化处理。

        response.addCookie(cookie); // 输出到客户端
4.session常用api

HttpSession session = request.getSession(); // 创建session

session.setAttribute("name","tom"); // 设置Session属性

out.println("欢迎您:" +session.getAttribute("name")); // 获取Session属性

销毁session ServletActionContext.getRequest().getSession().invalidate();

通过java代码设置
session.setMaxInactiveInterval(30*60);//以秒为单位,即在没有活动30分钟后,session将失效

在tomcat配置文件中配置session的超时时间
            <session-config>
                <session-timeout>分钟为单位</session-timeout>
            </session-config>

5cookie/session的区别与联系区别:

1.cookie存放在客户端,session存放在服务器端。

2.cookie只能存放4k的数据,而session理论上没有做限制

联系:

session虽说存放在服务器端,但是仔细看刚才的执行流程你会明白,session是依赖于cookie的,这一点也是本篇文章想要着重强调的

7.cookie/session使用注意事项
1.cookie大小有限制 4k

2.cookie不能跨浏览器

3.cookie默认不支持中文(但是可以通过转码)

4.cookie对于浏览器 一个浏览器中最多可以保存300cookie 为每个网站最多20个

5.如果是安全性较高的数据应存放在session中,因为cookie存放在客户端总会轻易被不法分子获取

6.如果是访问量特别大的网站,尽量不要在session中存储用户数据,因为每个用户存一个session会给服务器造成很大的压力
7.cookie 创建默认是临时cookie 就是浏览器关闭,cookes失效,而seesion创建默认是30分钟, cookie 和seesion 都可以持久化(设置时间)。 

8.session 的使用是依赖cookie的 应为session的唯一标示sessionID 放在cookie中,下面会讲下工作遇到的坑。 

6.新手使用session时常踩的坑

很多人使用session时希望用户信息可以保存一段时间比如保存7天,于是配置了Tomcat的

<session-config>

        <session-timeout>7天</session-timeout>

</session-config>。

配置完后发现,关闭浏览器后再访问还是取不到session。这是因为session的配置没起作用吗?不是的,其实session还是存在于服务器的,只是没有设置cookie持久化,cookie默认就会在浏览器关闭时销毁,所以叫做JSESSIONID的cookie也被销毁了,再到服务器的时候没有这个叫JSESSIONID的cookie就取不到相关的session了。

所以,如果想7天内都能访问到session,需要将cookie也设置持久化!

关于cookie和session的跟踪过程cookie与session联系的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于cookie和session的关系、cookie和session的加密?、cookie和session的区别、cookie和session的区别及其原理的相关知识,请在本站寻找。

本文标签: