今天主要学习了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理论总结的更多相关文章

  1. Cookies和Session的区别

    原文:http://www.cnblogs.com/lijihong/p/4743818.html 今天主要学习了Cookies和Session,网络上关于这方面的知识可谓很多,让人眼花缭乱,在此作一 ...

  2. Cookies 和session

    一 会话跟踪 在一个会话的多个请求中共享数据,这就是会话跟踪技术 请求登录(请求参数是用户名和密码): 请求转账(请求参数与转账相关的数据): 请求信誉卡还款(请求参数与还款相关的数据). 登录信息在 ...

  3. 18、cookies与session学习笔记

    本文记录学习 cookies 和 session 的一些小练习和知识点   知识点1    cookies 和 session 的由来   HTTP协议是无状态的协议,因为一旦浏览器和服务器之间的请求 ...

  4. cookies和session

      基于cookies做用户验证时,敏感信息不适合放在cookies中 cookies保存在客户浏览器端的键值对 session保存在服务器端的键值对(依赖于cookies),把用户浏览器中的cook ...

  5. django cookies与session

    1. cookiies # cookies def login(request): print('COOKIES',request.COOKIES) print('SESSION',request.s ...

  6. 有关cookies与session的详细信息

    COOKIES与SESSION 详细信息参考:https://www.cnblogs.com/linguoguo/p/5106618.html 会话(Session)跟踪是Web程序中常用的技术,用来 ...

  7. django中cookies和session

    django中cookies和session是两个经常使用的用户认证工具.都是类似于字典的数据类型,都是request的内部属性 cookies的读写方法 cookies读,比如username us ...

  8. asp.net网站防恶意刷新的Cookies与Session解决方法

    本文实例讲述了asp.net网站防恶意刷新的Cookies与Session解决方法,是WEB程序设计中非常实用的技巧.分享给大家供大家参考.具体实现方法如下: Session版实现方法: public ...

  9. Cookies和Session的定义与区别

    Cookies和Session二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来.当下次你再光临同一个网 ...

随机推荐

  1. static的用途

    1)限制变量的作用域:即在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变: 2)限制变量的存储域:<a>在模块内(但在函数体外),一个被声明为静态的变量,可以被模块内的所 ...

  2. apache2.2 + tomcat6 整合以及集群配置整理

    运行环境:apache2.2.X + tomcat6.0.X + window xp 1. 安装Apache,服务启动后在浏览器中输入http://localhost进行测试,如果能看到一个" ...

  3. IOS中的NSTimer定时器详解

    /* 在IOS中有多种定时器,这里我对NSTimer定时器做了一个简单的介绍.如果你是小白,你可能会从这篇文章中学习到一些知识,如果你是大牛,请别吝啬你的评论,指出我的不足,你的质疑是对我最大的帮助. ...

  4. Java 编译解释

    JDK提供的主要开发工具有:编译程序,解释执行程序.调试程序.Applet执行程序.文档管理程序.包管理程序等. 1.编译程序:javac.exe,对应的javac命令将Java源程序转换为字节码. ...

  5. linux采用模块方法,添加一个新的设备

    该文转载自:http://rangercyh.blog.51cto.com/1444712/521244 系统调用是操作系统内核和应用程序之间的接口,而设备驱动程序是操作系统内核和机器硬件之间的接口. ...

  6. 利用反射生成SQL语句

    // 修改学员信息的方法 public bool ModifyStudent(MODEL.Students model) { // 利用反映获取类对所有属性,用来动态生成SQL语句 StringBui ...

  7. ubuntu server 安装

    http://tigerlchen.iteye.com/blog/1765765  解决CDROM找不到的bug

  8. 四层运维工具nc

        nc命令全名为netcat,顾名思义就是通过TCP或UDP从网络读写数据. 很多事情不一定非得抓包,nc也能发挥巨大作用. 1.传输文件 使用<>重定向符(只适用单文件,不推荐.失 ...

  9. 《sed的流艺术之二》-linux命令五分钟系列之二十二

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  10. Traveller数据访问路径

    2015年10月数据访问路径