Cookies和Session理论总结
今天主要学习了Cookies和Session,网络上关于这方面的知识可谓很多,让人眼花缭乱,在此作一个小结。本文不讲多,不讲什么高大上的,只是抛出一块砖,讲三个问题:①什么是Cookies和Session?②为什么要用Cookies和Session;③Session什么情况下被销毁。下一篇文章将以Java为例,简单实践一下。
1. 什么是Cookies,什么是Session?
关于这两个概念,很多文章都会给你来一长串定义,balabala一大堆。其实我个人认为这两个东东本质上做了一件事情——记录用户数据(也就是一小段文本)!!!比如,我们登陆论坛的时候,都是自动登陆的,这些数据就是以Cookies或Session方式给你记录下来的。那这两个东东有什么区别呢?最根本的:Cookies是由服务器生成,发送给客户端浏览器,由浏览器保存;Session则保存在服务器端,当然,服务器上有许多Session对象,怎么索引,这里会生成Session ID,以Cookies的方式发送给客户端,之后请求,服务器端就根据Session去索引Session对象,从而获取所需信息。
关于Cookies结构及相关知识,见参考文献:[2]。
关于Cookies和Session更多描述,见参考文献:[1]。
2. 为什么要用这两个东东?
个人理解:主要是为了方便用户使用,提升用户体验;如果被一些流氓公司利用,做了一些不道德的事,这也让我们很头疼,我们只能禁用Cookies了。。。^_^。
3. Session什么时候会被销毁?
Session,中文翻译为会话,顾名思义,我以为Session对象是在访问网站建立,在退出网站是销毁的。其实我错了!其实用户退出浏览器或退出网站,虽然session ID可能找不到了(注意我这里用的是可能,假设Session ID以Cookies方式给客户端保存,并且设定了MaxAge(最大有效时间),则SessionID将会保存到硬盘上,这样Session ID仍然存在),但是服务器上Session对象仍然存在。只有下述三种情况会使session对象被删除:
- 服务端程序主动删除,即调用HttpSession.inValidate()函数;
- 距离上一次收到客户端发送session ID的时间间隔超过session的最大有效时间;(哦,Session也是有有效时间的啊!!!)
- 服务器进程被停止。
所以,大家别被Session这个名字给误导了~一次会话结束,不会把服务器上的Session对象删掉的。
最后提一下:
本文讲的都是一些个人理解,或者在阅读一些知识后的总结,可能有错,请帮忙指出,谢谢;
关于Cookies,Session其他理论问题,都可以参考文献[1],不想再抄袭;
关于在Java中,Cookies怎么使用,怎么创建、怎么设置值、Session怎么创建、怎么设置值,等等,这些我们准备下一文具体实践一下。
附:参考文献
[1] cookie、session及实现记住密码,自动登录: http://blog.163.com/xiexueyong1987@126/blog/static/126267342201031993557704/
[2] Java之Cookie详解:http://www.cnblogs.com/z941030/p/4742188.html
上述内容编辑于2015-08-19
下述内容编辑于2015-08-23
Cookies和Session都是用于保存用户状态数据的。上次我们最后说,准备在JSP下实验以下,下面我们嵌入到JSP中的代码如下:
<%
// 若请求对象中有Cookies,且有用户名和密码的Cookies,则将其写入到
// 字符串中,以便后续显示在输入框中。
String userName = "", password = "";
boolean isAutoLogin = false;
request.setCharacterEncoding("UTF8");
Cookie[] cookies = request.getCookies();
for (int i = 0; cookies != null && i < cookies.length; ++i) {
if (cookies[i].getName().equals("userName")) {
userName = cookies[i].getValue();
} if (cookies[i].getName().equals("password")) {
password = cookies[i].getValue();
} if (cookies[i].getName().equals("autoLogin")) {
isAutoLogin = cookies[i].getValue().equals("on");
}
} if (isAutoLogin == true) {
if (userName.equals("lijihong") && password.equals("123456789")) {
%>
<jsp:forward page="/IndexAuto.jsp"></jsp:forward>
<%
}
}
else {
// 若请求参数中有userName和password,则将它们放到回复对象中。
String userNameParam = request.getParameter("userName");
String passwordParam = request.getParameter("password");
String autoLoginParam = request.getParameter("autoLogin"); if (userNameParam != null && !userNameParam.equals("")) {
Cookie cookie = new Cookie("userName", userNameParam);
response.addCookie(cookie);
} if (passwordParam != null && !passwordParam.equals("")) {
Cookie cookie = new Cookie("password", passwordParam);
response.addCookie(cookie);
} if (autoLoginParam != null && autoLoginParam.equals("on")) {
Cookie cookie = new Cookie("autoLogin", autoLoginParam);
cookie.setMaxAge(14 * 24 * 60 * 60);
response.addCookie(cookie);
} if (userNameParam != null &&
userNameParam.equals("lijihong") &&
passwordParam != null &&
passwordParam.equals("123456789")) {
%> <jsp:forward page="/Index.jsp"></jsp:forward> <%
}
}%>
上述代码写的是Cookies数据的保存和使用,Session是类似的,就不再重复了。注意,代码中自动登录和手动登录跳转页面不一样是为了在实验中区分两种登录方式。
Cookies和Session理论总结的更多相关文章
- Cookies和Session的区别
原文:http://www.cnblogs.com/lijihong/p/4743818.html 今天主要学习了Cookies和Session,网络上关于这方面的知识可谓很多,让人眼花缭乱,在此作一 ...
- Cookies 和session
一 会话跟踪 在一个会话的多个请求中共享数据,这就是会话跟踪技术 请求登录(请求参数是用户名和密码): 请求转账(请求参数与转账相关的数据): 请求信誉卡还款(请求参数与还款相关的数据). 登录信息在 ...
- 18、cookies与session学习笔记
本文记录学习 cookies 和 session 的一些小练习和知识点 知识点1 cookies 和 session 的由来 HTTP协议是无状态的协议,因为一旦浏览器和服务器之间的请求 ...
- cookies和session
基于cookies做用户验证时,敏感信息不适合放在cookies中 cookies保存在客户浏览器端的键值对 session保存在服务器端的键值对(依赖于cookies),把用户浏览器中的cook ...
- django cookies与session
1. cookiies # cookies def login(request): print('COOKIES',request.COOKIES) print('SESSION',request.s ...
- 有关cookies与session的详细信息
COOKIES与SESSION 详细信息参考:https://www.cnblogs.com/linguoguo/p/5106618.html 会话(Session)跟踪是Web程序中常用的技术,用来 ...
- django中cookies和session
django中cookies和session是两个经常使用的用户认证工具.都是类似于字典的数据类型,都是request的内部属性 cookies的读写方法 cookies读,比如username us ...
- asp.net网站防恶意刷新的Cookies与Session解决方法
本文实例讲述了asp.net网站防恶意刷新的Cookies与Session解决方法,是WEB程序设计中非常实用的技巧.分享给大家供大家参考.具体实现方法如下: Session版实现方法: public ...
- Cookies和Session的定义与区别
Cookies和Session二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来.当下次你再光临同一个网 ...
随机推荐
- mysql的分区技术
一.概述 当 MySQL的总记录数超过了100万后,会出现性能的大幅度下降吗?答案是肯定的,但是,性 能下降>的比率不一而同,要看系统的架构.应用程序.还有>包括索引.服务器硬件等多种因素 ...
- Win7上安装oracle中可能遇到的错误
安装oracle,总是出现一个警告两个错误错误,其描述是:OUI-18001:不支持操作系统’Windows Vista版本6.1’,找了好久,终于找到原因,因为oracle不支持Win7操作系统. ...
- objective-c在Xcode中@property相关参数的解释
objective-c在其对象拥有成员变量时,我们为了保持代码的封装,会将成员变量设置为@protected,并为成员变量编写setter和getter方法. 如: @interface Person ...
- Telerik柱状图(1)
此随笔主要是介绍一下Telerik的柱状图控件中的一种.效果图为: 此图展示了五个人每个季度的绩效成绩,用图形方式展示数据可以让用户更直观的去看数据,分析数据,不多说了,在这个分享一下我录得视频讲解, ...
- linux命令之端口占用
1.lsof命令 eg: lsof -i:8080,这里显示8080端口在被java使用,状态是LISTEN, 可以使用killall 进程名(killall java) 结束占用端口的进程(不建议, ...
- Druid 简单介绍
官方网址:http://code.alibabatech.com/wiki/display/Druid/Home 1.什么是Druid Druid首先是一个数据库连接池.Druid是目前最好的数据库连 ...
- 在HTML中插入回车换行
在制作EPUB的时候,发现原来收集的html文本根本就没有换行,这个在代码里面是无法忍受的,因为看着比较混乱,全部都是在一行里面,这个就像写作文的时候,你看到的文字全部都是在一行里面显示出来的,根本就 ...
- HDU 5351 MZL's Border (规律,大数)
[HDU 5351 MZL's Border]题意 定义字符串$f_1=b,f_2=a,f_i=f_{i-1}f_{i-2}$. 对$f_n$的长度为$m$的前缀$s$, 求最大的$k$满足$s[1] ...
- Python3 基础
Hello world 在文本编辑器中,键入python执行代码,保存文件为hello.py print('hello, world') 注意print前面不要有任何空格.然后,选择一个目录,例如C: ...
- Java源代码分析与生成
源代码分析:可使用ANTLRANTLR是开源的语法分析器,可以用来构造自己的语言,或者对现有的语言进行语法分析. JavaParser 对Java代码进行分析 CodeModel 用于生成Java代码 ...