web应用中的session和cookie机制相信大家已经再熟悉不过了,cookie是一种存在于客户端上的用于保存用户浏览数据的小文件。session存在于服务器中,可以用来区分用户和保存用户信息。session会根据客户端的请求给不同客户端分配一个唯一的sessionId,用来区分session。例如用户登录之后,给用户创建一个session,并在session中保存该用户的相关信息,即可以避免用户的id在网络上传输,又可以保证区分每一个用户。
web中实现session的机制有两种:
1.通过cookie来实现
所谓通过cookie来实现,说白了就是在创建了session之后,把sessionId写入到cookie文件中,之后用户在发送请求的时候,服务器会去cookie中拿session。
2.通过url重写来实现
如果用户禁用了cookie,第一种方法就行不通了。这时就会用到第二种方法。所谓url重写,其实意思就是把sessionid放入到请求的url之后,就是每一次把sessionid显示到url后面,带到服务器后,通过sessionId找到服务器中的session对象。
方法就是催对请求的url进行处理,response.encodeURL(url),使用这个方法,、
一是可以对url进行编码,就是把url中的中文转码成浏览器地址栏中%%什么的,如果url中没有中文,则什么也不干;
二就是我们说的,可以把sessionId加入到url中。
Android中的session机制
android中的session其实道理是一样的,只不过在处理方法上有所不同。理清一下思路:当客户端发送登录请求后,第一次肯定是不会有session的,到达服务器之后,服务器可以为这个特定的客户端创建session:
HttpSession session = request.getSession(true); //创建session
session.setAttribute("uid", user.getUid()); //session中放入id
上面true代表了如果已经创建了session了,则去找这个session,如果没有创建,就为其创建一个session,
第二句就是在该session中放入和该用户相关的信息。那么这个session就和这个用户一一对应,服务器就靠这个来识别用户身份。
其实前面服务器端和web应用都是一样的,但是在客户端:
因为android手机端在访问web服务器时,没有给http请求头部设置sessionID,而使用web浏览器作为客户端访问服务器时,在客户端每次发起请求的时候,都会将交互中的sessionID:JSESSIONID设置在Cookie头中携带过去,服务器根据这个sessionID获取对应的Session,而不是重新创建一个新Session(除了这个Session失效)。
以java.net.HttpURLConnection发起请求为例:
获取Cookie:
URL url = new URL(requrl);
HttpURLConnection con= (HttpURLConnection) url.openConnection();
// 取得sessionid.
String cookieval = con.getHeaderField("set-cookie");
String sessionid;
if(cookieval != null) {
sessionid = cookieval.substring(0, cookieval.indexOf(";"));
}
//sessionid值格式:JSESSIONID=AD5F5C9EEB16C71EC3725DBF209F6178,是键值对,不是单指值
发送设置cookie:
if(sessionid != null) {
con.setRequestProperty("cookie", sessionid);
}
这样的话就可以将服务器分配给客户端的sessionId取到了,在客户端发送请求的时候带上这个sessionid,服务器会根据这和sessionId自动搜索session,这样就保证了服务器和客户端在同一个会话中。
参考:http://blog.csdn.net/dacainiao007/article/details/9234585
http://my.oschina.net/janson2013/blog/111050
分享到:
相关推荐
主要给大家介绍在php中是如何使用session实现保存用户登录信息的,涉及到php session 用户登录等一些知识点,使用session保存用户登录信息要比cookie安全很多。感兴趣的朋友一起学习吧
Android中使用session传送对象,集合数据,在Activity中Session session=Session.getSession();得到session对象,session的类,本人已经上传
web项目开发过程中经常遇到用户登陆,退出的问题,根据登陆和退出来操作session的存值和销毁. 但往往很多用户不去点击"退出",而是关闭FF的tab或浏览器(多种浏览器),这就给session的销毁带来了困难.
有关Cookie与Session机制详细说明。好东西
android获取web服务器端session并验证登陆
山石网科防火墙session机制
重写session机制,默认session是以临时文件形式存储在服务器,将session写入数据库,建表和注释写的都很清晰,已测试
asp.net c# 在类中使用session的方法
本文详细介绍了在jsp中Cookie、Session机制。
cookie机制和session机制的区别.很有用的资料,最适合正在研究单点登录的朋友用
cookie机制和session机制的区别.docx
目录: 一、术语session 二、HTTP协议与状态保持 三、理解cookie机制 四、理解session机制 五、理解javax.servlet.http.HttpSession 六、HttpSession常见问题 七、跨应用程序的session共享 八、总结
全面理解session机制,对开发过程中session的使用提供知识!
详细的介绍了cookie和session的区别。
java中使用session模拟用户登陆
Servlet Session机制详解,如题,详细描述Session的原理,及使用方法,附部分代码
2.修改题目1,将提交的“用户名信息”保存到request中,“密码信息”保存到session中,而“用户是否已经注册的判定信息”保存在application中,并在显示页面中,分别从request、session和application中获取数据并...
该资源的主要讲解了session的主要用法,工作原理,安全机制,单点登录,在大型web中的应用。主要为对session不甚了解的同志,价值含量较高,也较为实用。
实现session身份认证机制
session.js, Session.js 获取用户会话信息 Session.js提供有关当前会话的信息。要使用:包括文件 session.js, 然后访问访问者对象。 它使用google加载器获取位置数据。 对于异步加载,请使用 window.session_loaded ...