首页 > 代码库 > cookies,session入门介绍
cookies,session入门介绍
会话
一、Cookie
基于Set-Cookie响应头和cookie请求头进行工作,将会话产生的数据保存在了客户端
response提供了addCookie方法,可以在响应中增加一个Cookie信息
request提供了getCookies方法,可以获取请求中的所有Cookie信息
new Cookie(String name,String value); 新建一个Cookie对象
setValue与getValue方法 : 设置/获取Cookie的值
getName方法 获取Cookie的名字
setMaxAge与getMaxAge方法 --- Cookie发送到浏览器时,如果没有设置MaxAge,则当前Cookie信息会被存在浏览器的内存中,当关闭浏览器时,cookie信息就消失掉了(会话级别的
cookie)。我们也可以为Cookie设置一个MaxAge,浏览器收到这样的cookie后,会将cookie信息以文件的形式保存在浏览器的临时文件夹中,并且会设置文件的有效期限为maxage的值。这样
依赖在超时时间到来之前,浏览器无乱开关多少次,都会带有这个Cookie信息。
setPath与getPath方法:设置浏览器在访问哪个地址及其子地址时带着当前Cookie信息过来,如果不设置setPath这个方法,则默认的值是发送Cookie的Servlet所在的路径做Path
setDomain与getDomain方法 :设置浏览器在访问哪个域名时,带着这个Cookie信息,默认值是当前发送Cookie信息的网站的域名。现代的浏览器,只要cookie设置过domain信息,则
浏览器拒绝接受此cookie。
删除一个Cookie:发送一个同名,同path,同domain(不设置)的cookie到浏览器,并设置maxAge为0,使浏览器收到这个Cookie后覆盖旧的Cookie,覆盖后新的Cookie立即超时,被删
除,就相当于删除了一个Cookie
二、JSP入门
jsp是sun提供的动态web资源开发技术,特点在于编写一个jsp页面就像在写一个HTML页面一样,不一样的是,jsp中可以嵌入java代码。如果说Servlet是在java代码中嵌入html内容
,则可以说jsp是在html中嵌入java代码,从而非常方便的组织html页面输出。
jsp在第一次被访问到时,会被服务器中的jsp翻译引擎翻译为Servlet,最终是由这个翻译过来的Servlet进行输出的。
JSP语法:
JSP模版元素:JSP页面中的HTML内容称之为JSP模版元素,在翻译过来的Servlet中,直接被out输出到浏览器
JSP脚本表达式:<%= java表达式%> 在翻译过来的Servlet中,直接计算表达式的值后输出到了浏览器上
JSP脚本片断:<% 若干java语句 %> 在翻译过来的Servlet中,直接被复制粘贴到了对应位置上执行
多个脚本片段之间可以互相访问,某一个脚本判断可以是不完整的java代码,但是所有的脚本判断组合在一起必须是完整的java语句。
JSP声明:<%! java代码 %> : 写在JSP声明中的内容,在翻译过来的Servlet中会被放置到和Service方法同级的位置,成为一个类的成员
JSP注释:<%-- 注释的内容 --%> : 被jsp注释注释的内容,会在翻译为Servlet的过程中被遗弃。
// : 被java注释注释的内容,在翻译时会正常翻译,但是java源码中被注释了,在编译为class文件时被丢弃
<!-- -->:被HTML注释注释的内容,将会被当作模版元素原封不懂的发给浏览器,浏览器收到数据后认识html注释,其中的内容不予显示。
三、Session
1.Session是一个域对象
生命周期:当第一调用到request.getSeesion()方法时,创建出session。当超过30分钟(这个时间可以修改)session都没有人使用,则服务器认为session已经超时,此时
,销毁session。明确的调用session.invalidate方法也可以销毁session。当服务器非正常关闭时,session随着服务器销毁而销毁。如果服务器是正常关闭,则存活着的session,会在服务
器关闭时,以文件的形式被存储在硬盘用,这个过程叫做session的钝化。服务器在正常启动时,会将钝化在文件中的session在恢复到内存中,这个过程叫做session的活化。
作用范围:整个会话
作用:保存会话相关的数据,在整个会话过程中共享数据
setAttribute()
getAttribute()
removeAttribute()
2.Session原理:
session是基于一个特殊的Cookie工作的,名字叫做JSESSIONID,当服务器为浏览器创建出session时,会发送JSESSIONID cookie,命令浏览器保存它对应的Session的id,从此浏览
器再来访问服务器时,会带着这个cookie过来,服务器可以分析这个cookie,从而找到浏览器对应的session为其服务。
可以巧妙的利用session的原理,自己发送同名同path的JSESSIONIDcookie,并设置MaxAge,从而使浏览器将此Cookie以文件的形式保存在浏览器的临时文件夹中,从而使同一台计算
机内的浏览器即使关闭多次,仍然可以使用到之前的Session。
3.禁用Cookie使用session
如果浏览器禁用了cookie,则服务器创建了session后就发送的JSESSIONID cookie浏览器会拒绝接受,这样一来,浏览器不保存JSESSIONID 信息,session就无法工作。此时的解决
方案,可以将整个站点中的所有的超链接进行改写,在所有的超链接后面都跟上一个特殊的参数,带着JSESSIONID,这样一来,用户点击任意的超链接,都会带着这个特殊参数访问服务器,
服务器可以从中分析出JSESSIONID信息,从而找到对应的Session为浏览器服务。
使用下面的两个方法可以将传入的地址进行改造,返回值就是传入的地址上加上JSESSIONID后的地址,这个过程叫做URL重写的过程,在URL重写之前,必须先获取到session。这两个
方法非常的只能,只要浏览器带了任意cookie信息访问服务器,则这两个方法认为浏览器没有禁用Cookie,就不会进行URL重写操作。
response.encodeURL(""); -- 对于普通的地址使用这个方法进行URL重写
response.encodeRedirectURL(""); -- 对于用来做重定向操作的地址,必须使用此方法进行URL重写
request.getSession() : 检查浏览器有没有带着JSESSIONID cookie过来,如果有,则拿出其中的值作为session id找到对应session为浏览器服务,如果没有 则分析浏览器访问时
用的URL中有没有JSESSIONID 这个特殊的参数,如果有,获取他的值,作为session id 找到对应的session为浏览器服务。如果还是找不到,则创建新的session,并把session 的Id以
JSESSIONID cookie的形式发送给浏览器保存。
4.session案例:实现用户登录注销功能
5.ServeltContext 、reqeust、session域的比较
servletContext 的作用域是整个web应用,随着服务器启动而创建,如果应用被移除出主机或服务器关闭则销毁。
request 的作用域是整个请求链,每一次请求都会创建一个request,当请求结束时request销毁。
session 的作用于是整个会话,第一次调用reqeust.getSession时创建,当一段时间没有使用或服务器关闭或调用session.invalidate方法时销毁
什么时候用ServeltContext什么时候用reqeust什么时候用session?
如果一个数据只是用来显示的话就用request域
如果一个数据除了用来显示以外我一会还要用,这时候用session
如果一个数据除了用来显示以外还要给别人用,这时候用ServletContext域
cookies,session入门介绍