Cookie和Session的基础知识+高级编程+实际开发中的应用(经典)

来源:互联网 发布:日立柜机 知乎 编辑:程序博客网 时间:2024/05/20 19:19
一、JSP
    1.jsp概述
    ~jsp是sun公司提供的动态web资源开发技术,出现的目的是解决Servlet不适合在java代码中输出html页面的问题。改变了Servlet在java代码中嵌入html代码的过程变为了在
H
TML页面中嵌入java代码,从而使组织页面的过程看起来就像在写一个html一样,而相对于html又可以嵌入java代码引入动态数据。
    
    ~jsp直接可以通过浏览器访问,jsp会在第一次被访问到时由服务器内部的jsp翻译引擎翻译为一个Servlet,从此每次对这个jsp的访问都是翻译过来的Servlet执行后输出
    
    2.jsp语法
        JSP模版元素:在jsp页面中直接书写的HTML内容就叫做jsp模版元素,在翻译过来的Servlet中模版元素被直接out.write()最终直接输出到浏览器上
        
        JSP脚本表达式: <%= java表达式%>  在翻译过来的Servlet中直接计算表达式的值,将计算出来的值输出到浏览器上
        
        JSP脚本片段:  <% 若干java语句 %> 在翻译过来的Servlet中直接被复制粘贴到了对应位置上
                                            多个脚本片段中的代码可以互相访问,一个脚本片段中的代码可以是不完整的但是所有的脚本片段加在一起应该是一个完整的
java代码
       JSP声明: <%! 若干java语句 %>  jsp声明中的内容在翻译过来的servlet中,会和Service方法平级,变为类的一个成员
        
       JSP注释: <%-- 被注释的内容 --%>  被jsp注释注释的内容,在翻译的过程中被遗弃掉,在翻译过来的Servlet中没有它
                // 被java注释注释的内容,被当作脚本片段翻译到了Servlet中,但是被注释掉了,在.java文件被编译成.class文件的过程中被遗弃掉
                <!-- --> html注释的内容被当作模版元素输出到了浏览器上,而浏览器认识html注释,最终不予显示而已
      
二、Cookie
客户端技术,基于set-Cookie 响应头和 cookie请求头,将会话产生的数据保存在客户端


Cookie cookie = new Cookie("","") -- 一个Cookie对象需要在创建的时候就指定好名字和值
setValue与getValue方法 
--  获取设置cookie的值
getName方法 
--  获取cookie的名字 ,cookie的名字一旦在创建的时候指定过,就不能再修改了.
setMaxAge与getMaxAge方法 
-- 用来设置cookie的保存时间的方法,一个cookie如果没有设置过maxage,那么这个cookie默认是一个会话级别的cookie,这个cookie信息会被浏览器保存在浏览器
的内存中,一旦浏览器关闭,内存销毁cookie信息也就消失了.也可以为一个Cookie设置maxage指定cookie要保存的时间,这样浏览器在接受到cookie后就会将cookie信
息以临时文件的形式保存在浏览器的临时文件夹中,保存的时间就是指定的时间,这样一来只要在过期时间之前,即使浏览器多次开关,cookie信息仍然会存在.
setPath与getPath方法
--用来设置在访问服务器中哪个路径及其子路径时带着当前cookie,如果没有明确设定过path,则默认的path是当前发送Cookie的Servlet的所在的路径
http://loclahost/Day05/servlet/Demo1 cookie 
setDomain与getDomain方法
--用来设置访问哪个域名时带着当前的Cookie,如果不设置则默认是当前发送cookie的域名
注意:现代的浏览器只要cookie设置过domain则认为这是一个第三方cookie,浏览器拒绝接受



response.addCookie(Cookie c);--向响应中增加一个cookie信息
Cookie [] cs = request.getCookies(); -- 从请求中获取所有cookie组成的数组
    
*想要删除一个cookie,只要发送和要删除的cookie同名同path同domaint(设置了就不接受了,所以不设置)cookie并且,maxage设置为0,这样浏览器在收到cookie后覆
盖旧的cookie,并且立即超时删除,就相当于删除了旧的Cookie
    


三、session
服务器端技术,将会话产生的数据保存在服务器端
1.session是一个域对象

作用范围:整个会话范围
生命周期:当浏览器第一次调用到request.getSession()时创建出对应浏览器的session.当session超过30分钟(这个时间是可以在web.xml中配置的)没人用服
务器认为session超时,此时销毁session.当调用session对象的invalidate方法则立即销毁session.当服务器非正常关闭是session会被销毁.
~服务器正常关闭时,还存活的session将被钝化起来,直到下次正常启动服务器时,再活化回来.


setAttribute
getAttribute
removeAttribute


2.session的原理
基于一个名叫JSESSIONID的特殊的cookie工作的,这个cookie名字叫JSESSIONID,值是创建处理的session的id编号,从而下次在带着这个cookie访问服务器
时,request.getSession方法可以从cookie中分析出session的id,找到对应的id的session为这个浏览器服务


*购物案例中手动发送jsessionid cookie并设置maxage,实现即使开关浏览器仍然能够使用session




3.URL重写解决禁用cookie时使用session
URL重写:如果浏览器禁用了cookie可以在网站所有超链接上都拼接一个特殊的参数JSESSIONID,从而利用URL将session的id带过来从而找到session为浏览器服务器.
这个过程叫做URL重写

在url重写之前一定要先获取session,有了session才能重写
response.encodeURL("") -- 如果地址是一个普通地址就用这个方法
response.encodeRedirectURL("") -- 如果这个地址是给重定向用的请用这个方法


*URL重写的方法非常的聪明,会自动检查浏览器有没有带着cookie信息来,如果浏览器带了任意的cookie访问服务器,URL重写的方法认为浏览器没有禁用cookie就不会进行URL重写的操作



*request.getSession() -- 首先检查cookie中有没有JSESSIONID cookie如果有找到他的值找到session为浏览器服务器
如果没找到接着找URL后有没有JSESSIONID,如果有拿着值找到session为浏览器服务器
如果还找不到,认为是一个新的来访者这行代码创建一个新的session,并将session的id值作为JSESSIONID cookie的值发送给浏览器




案例1:用户登录注销
案例2:一次性验证码
案例3:防止表单重复提交



cookie和session区别:
cookie是客户端技术,优点可以保存的时间比较长,缺点时随时可能由于用户的操作被删除掉
session是服务器端技术,优点十分可靠,由于占用服务器内存,一般存活的时间都比较短


1 0
原创粉丝点击