JavaWeb登录、注销、退出、记住⽤户名和密码
应该是保存在Cookie⾥,session是放在服务器的内存⾥的。在⽤户关闭了⽹页窗⼝后,session就清空了。⽽Cookie是保存在⽤户的IE临时⽂件夹中的,再次登录时,读取其中的值传给服务器。 session是放在服务器的内存,Cookie是保存在⽤户端。以下是从⽹上搜到的相关内容,希望对你有⽤:
⼀、cookie机制和session机制的区别
*************************************************************************************
具体来说cookie机制采⽤的是在客户端保持状态的⽅案,⽽session机制采⽤的是在服务器端保持状态的⽅案。同时我们也看到,由于才服务器端保持状态的⽅案在客户端也需要保存⼀个标识,所以session 机制可能需要借助于cookie机制来达到保存标识的⽬的,但实际上还有其他选择gei的成语
*************************************************************************************
⼆、会话cookie和持久cookie的区别
*************************************************************************************
如果不设置过期时间,则表⽰这个cookie⽣命周期为浏览器会话期间,只要关闭浏览器窗⼝,cookie就消失了。这种⽣命期为浏览会话期的cookie被称为会话cookie。会话cookie⼀般不保存在硬盘上⽽是保存在内存⾥。如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,⽐如两个IE窗⼝。⽽对于保存在内存的cookie,不同的浏览器有不同的处理⽅式。
*************************************************************************************
三、如何利⽤实现⾃动登录
*************************************************************************************
当⽤户在某个⽹站注册后,就会收到⼀个惟⼀⽤户ID的cookie。客户后来重新连接时,这个⽤户ID会⾃动返回,服务器对它进⾏检查,确定它是否为注册⽤户且选择了⾃动登录,从⽽使⽤户务需给出明确的⽤户名和密码,就可以访问服务器上的资源。
*************************************************************************************
四、如何根据⽤户的爱好定制站点
*************************************************************************************
⽹站可以使⽤cookie记录⽤户的意愿。对于简单的设置,⽹站可以直接将页⾯的设置存储在cookie中完成定制。然⽽对于更复杂的定制,⽹站只需仅将⼀个惟⼀的标识符发送给⽤户,由服务器端的数据库存储每个标识符对应的页⾯设置。
*************************************************************************************
五、cookie的发送
*************************************************************************************
1.创建Cookie对象
2.设置最⼤时效
3.将Cookie放⼊到HTTP响应报头如果你创建了⼀个cookie,并将他发送到浏览器,默认情况下它是⼀个会话级别的cookie:存储在浏览器的内存中,⽤户退出浏览器之后被删除。如果你希望浏览器将该cookie存储在磁盘上,则需要使⽤maxAge,并给出⼀个以秒为单位的时间。将最⼤时效设为0则是命令浏览器删除该cookie。发送cookie需要使⽤HttpServletResponse的addCookie⽅法,将cookie插⼊到⼀个Set-Cookie HTTP请求报头中。由于这个⽅法并不修改任何之前指定的Set-Cookie报头,⽽是创建新的报头,因此我们将这个⽅法称为是addCookie,⽽⾮setCookie。同样要记住响应报头必须在
任何⽂档内容发送到客户端之前设置。
六、cookie的读取
*************************************************************************************
1.调⽤Cookie 要获取有浏览器发送来的cookie,需要调⽤HttpServletRequest的getCookies⽅法,这个调⽤返回Cookie对象的数组,对应由HTTP请求中Cookie报头输⼊的值。
2.对数组进⾏循环,调⽤每个cookie的getName⽅法,直到到感兴趣的cookie为⽌ cookie与你的主机(域)相关,⽽⾮你的servlet或JSP页⾯。因⽽,尽管你的servlet可能只发送了单个cookie,你也可能会得到许多不相关的cookie。例如: String cookieName = “userID”; Cookie cookies[] = Cookies(); if (cookies!=null){ for(int i=0;i<cookies.length;i++){ Cookie cookie = cookies[i]; if (cookieName.Name())){ Value()); } } }
*************************************************************************************
七、如何使⽤cookie检测初访者
*************************************************************************************
A.调⽤Cookies()获取Cookie数组
B.在循环中检索指定名字的cookie是否存在以及对应的值是否正确
C.如果是则退出循环并设置区别标识
D.根据区别标识判断⽤户是否为初访者从⽽进⾏不同的操作 *************************************************************************************
⼋、使⽤cookie检测初访者的常见错误
*************************************************************************************
不能仅仅因为cookie数组中不存在在特定的数据项就认为⽤户是个初访者。如果cookie数组为null,客户可能是⼀个初访者,也可能是由于⽤户将cookie删除或禁⽤造成的结果。但是,如果数组⾮null,也不过是显⽰客户曾经到过你的⽹站或域,并不能说明他们曾经访问过你的servlet。其它servlet、JSP页⾯以及⾮Java Web应⽤都可以设置cookie,依据路径的设置,其中的任何cookie都有可能返回给⽤户的浏览器。正确的做法是判断cookie数组是否为空且是否存在指定的Cookie对象且值正确。
*************************************************************************************
九、使⽤cookie属性的注意问题
*************************************************************************************
属性是从服务器发送到浏览器的报头的⼀部分;但它们不属于由浏览器返回给服务器的报头。因此除了名称和值之外,cookie属性只适⽤于从服务器输出到客户端的cookie;服务器端来⾃于浏览器的cookie并没有设置这些属性。因⽽不要期望通过Cookies得到的cookie中可以使⽤这个属性。这意味着,你不能仅仅通过设置cookie的最⼤时效,发出它,在随后的输⼊数组中查适当的cookie,读取它的值,修改它并将它存回Cookie,从⽽实现不断改变的cookie值。 *************************************************************************************
⼗、如何使⽤cookie记录各个⽤户的访问计数秘密的角落细思极恐
*************************************************************************************
1.获取cookie数组中专门⽤于统计⽤户访问次数的cookie的值
2.将值转换成int型
3.将值加1并⽤原来的名称重新创建⼀个Cookie对象
4.重新设置最⼤时效
5.将新的cookie输出
*************************************************************************************
⼗⼀、session在不同环境下的不同含义
*************************************************************************************
session,中⽂经常翻译为会话,其本来的含义是指有始有终的⼀系列动作/消息,⽐如打电话是从拿起电话拨号到挂断电话这中间的⼀系列过程可以称之为⼀个session。然⽽当session⼀词与⽹络协议相关联时,它⼜往往隐含了“⾯向连接”和/或“保持状态”这样两个含义。session在Web开发环境下的语义⼜有了新的扩展,它的含义是指⼀类⽤来在客户端与服务器端之间保持状态的解决⽅案。有时候Session也⽤来指这种解决⽅案的存储结构。
*************************************************************************************
⼗⼆、session的机制
*************************************************************************************
session机制是⼀种服务器端的机制,服务器使⽤⼀种类似于散列表的结构(也可能就是使⽤散列表)来保存信息。但程序需要为某个客户端的请求创建⼀个session的时候,服务器⾸先检查这个客户端的请求⾥是否包含了⼀个session标识-称为session id,如果已经包含⼀个session id则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使⽤(如果检索不到,可能会新建⼀个,这种情况可能出现在服务端已经删除了该⽤户对应的session对象,但⽤户⼈为地在请求的URL后⾯附加上⼀个JSESSION的参数)。如果客户请求不包含session id,则为此客户创建⼀个session并且⽣成⼀个与此session相关联的session id,这个session id将在本次响应中返回给客户端保存。
*************************************************************************************
⼗三、保存session id的⼏种⽅式
*************************************************************************************
A.保存session id的⽅式可以采⽤cookie,这样在交互过程中浏览器可以⾃动的按照规则把这个标识发送给服务器。
B.由于cookie可以被⼈为的禁⽌,必须有其它的机制以便在cookie被禁⽌时仍然能够把session id传
递回服务器,经常采⽤的⼀种技术叫做URL重写,就是把session id附加在URL路径的后⾯,附加的⽅式也有两种,⼀种是作为URL路径的附加信息,另⼀种是作为查询字符串附加在URL后⾯。⽹络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后⾯都包含这个session id。
C.另⼀种技术叫做表单隐藏字段。就是服务器会⾃动修改表单,添加⼀个隐藏字段,以便在表单提交时能够把session id传递回服务器。*************************************************************************************
⼗四、session什么时候被创建
*************************************************************************************
⼀个常见的错误是以为session在有客户端访问时就被创建,然⽽事实是直到某server端程序(如Servlet)调⽤
⼗五、session何时被删除
*************************************************************************************
梦见打井session在下列情况下被删除:
A.程序调⽤HttpSession.invalidate()
B.距离上⼀次收到客户端发送的session id时间间隔超过了session的最⼤有效时间
C.服务器进程被停⽌再次注意关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。
*************************************************************************************
⼗六、URL重写有什么缺点
*************************************************************************************
对所有的URL使⽤URL重写,包括超链接,form的action,和重定向的URL。每个引⽤你的站点的URL,以及那些返回给⽤户的URL(即使通过间接⼿段,⽐如服务器重定向中的Location字段)都要添加额外的信息。这意味着在你的站点上不能有任何静态的HTML页⾯(⾄少静态页⾯中不能有任何链接到站点动态页⾯的链接)。因此,每个页⾯都必须使⽤servlet或JSP动态⽣成。即使所有的页⾯都动态⽣成,如果⽤户离开了会话并通过书签或链接再次回来,会话的信息都会丢失,因为存储下来的链接含有错误的标识信息-该URL后⾯的SESSION ID已经过期了。
*************************************************************************************
⼗七、使⽤隐藏的表单域有什么缺点
*************************************************************************************
仅当每个页⾯都是有表单提交⽽动态⽣成时,才能使⽤这种⽅法。单击常规的<A HREF..>超⽂本链接并不产⽣表单提交,因此隐藏的表单域不能⽀持通常的会话跟踪,只能⽤于⼀系列特定的操作中,⽐如在线商店的结账过程
*************************************************************************************
⼗⼋、会话跟踪的基本步骤
*************************************************************************************
1.访问与当前请求相关的会话对象
2.查与会话相关的信息
3.存储会话信息
今年中考时间4.废弃会话数据
*************************************************************************************
⼗九、getSession()/getSession(true)、getSession(false)的区别 *************************************************************************************
getSession()/getSession(true):当session存在时返回该session,否则新建⼀个session并返回该对象 getSession(false):当session存在时返回该session,否则不会新建session,返回null
*************************************************************************************
⼆⼗、如何将信息于会话关联起来
*************************************************************************************
setAttribute会替换任何之前设定的值;如果想要在不提供任何代替的情况下移除某个值,则应使⽤removeAttribute。这个⽅法会触发所有实现了HttpSessionBindingListener接⼝的值的valueUnbound ⽅法。
*************************************************************************************
⼆⼗⼀、会话属性的类型有什么限制吗
*************************************************************************************
通常会话属性的类型只要是Object就可以了。除了null或基本类型,如int,double,boolean。如果要使⽤基本类型的值作为属性,必须将其转换为相应的封装类对象
*************************************************************************************
⼆⼗⼆、如何废弃会话数据
*************************************************************************************
A.只移除⾃⼰编写的servlet创建的数据:调⽤removeAttribute(“key”)将指定键关联的值废弃
B.删除整个会话(在当前Web应⽤中):调⽤invalidate,将整个会话废弃掉。这样做会丢失该⽤户的所有会话数据,⽽⾮仅仅由我们servlet或JSP页⾯创建的会话数据
C.将⽤户从系统中注销并删除所有属于他(或她)的会话调⽤logOut,将客户从Web服务器中注销,同时废弃所有与该⽤户相关联的会话
(每个Web应⽤⾄多⼀个)。这个操作有可能影响到服务器上多个不同的Web应⽤
*************************************************************************************
⼆⼗三、使⽤isNew来判断⽤户是否为新旧⽤户的错误做法 *************************************************************************************
public boolean isNew()⽅法如果会话尚未和客户程序(浏览器)发⽣任何联系,则这个⽅法返回true,这⼀般是因为会话是新建的,不是由输⼊的客户请求所引起的。但如果isNew返回false,只不过是说明他之前曾经访问该Web应⽤,并不代表他们曾访问过我们的servlet或JSP页⾯。因为session是与⽤户相关的,在⽤户之前访问的每⼀个页⾯都有可能创建了会话。因此isNew为false只能说⽤户之前访问过该Web应⽤,session可以是当前页⾯创建,也可能是由⽤户之前访问过的页⾯创建的。正确的做法是判断某个session中是否存在某个特定的key且其value是否正确
*************************************************************************************
⼆⼗四、Cookie的过期和Session的超时有什么区别
*************************************************************************************
会话的超时由服务器来维护,它不同于Cookie的失效⽇期。⾸先,会话⼀般基于驻留内存的cookie 不是持续性的cookie,因⽽也就没有截⾄⽇期。即使截取到JSESSIONID cookie,并为它设定⼀个失效⽇期发送出去。浏览器会话和服务器会话也会截然不同。
*************************************************************************************
⼆⼗五、session cookie和session对象的⽣命周期是⼀样的吗 *************************************************************************************
当⽤户关闭了浏览器虽然session cookie已经消失,但session对象仍然保存在服务器端
*************************************************************************************
⼆⼗六、是否只要关闭浏览器,session就消失了
*************************************************************************************
程序⼀般都是在⽤户做log off的时候发个指令去删除session,然⽽浏览器从来不会主动在关闭之前通知服务器它将要被关闭,因此服务器根本不会有机会知道浏览器已经关闭。服务器会⼀直保留这个会话对象直到它处于⾮活动状态超过设定的间隔为⽌。之所以会有这种错误的认识,是因为⼤部分sessi
on机制都使⽤会话cookie来保存session id,⽽关闭浏览器后这个session id就消失了,再次连接到服务器时也就⽆法到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使⽤某种⼿段改写浏览器发出的HTTP请求报头,把原来的session id发送到服务器,则再次打开浏览器仍然能够到原来的session。恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为session 设置了⼀个失效时间,当距离客户上⼀次使⽤session的时间超过了这个失效时间时,服务器就可以认为客户端已经停⽌了活动,才会把session删除以节省存储空间。由此我们可以得出如下结论:关闭浏览器,只会是浏览器端内存⾥的session cookie消失,但不会使保存在服务器端的session对象消失,同样也不会使已经保存到硬盘上的持久化cookie消失。
*************************************************************************************
一带一路是什么意思⼆⼗七、打开两个浏览器窗⼝访问应⽤程序会使⽤同⼀个session还是不同的session
*************************************************************************************
通常session cookie是不能跨窗⼝使⽤的,当你新开了⼀个浏览器窗⼝进⼊相同页⾯时,系统会赋予你⼀个新的session id,这样我们信息共享的⽬的就达不到了。此时我们可以先把session id保存在persistent cookie中(通过设置session的最⼤有效时间),然后在新窗⼝中读出来,就可以得到上⼀个窗⼝的session id了,这样通过session cookie和persistent cookie的结合我们就可以实现了跨窗⼝的会
话跟踪。
*************************************************************************************
⼆⼗⼋、如何使⽤会话显⽰每个客户的访问次数
*************************************************************************************
由于客户的访问次数是⼀个整型的变量,但session的属性类型中不能使⽤int,double,boolean等基本类型的变量,所以我们要⽤到这些基本类型的封装类型对象作为session对象中属性的值但像Integer是⼀种不可修改(Immutable)的数据结构:构建后就不能更改。这意味着每个请求都必须创建新的Integer对象,之后使⽤setAttribute来代替之前存在的⽼的属性的值。例如: HttpSession session =
*************************************************************************************
⼆⼗九、如何使⽤会话累计⽤户的数据
*************************************************************************************
使⽤可变的数据结构,⽐如数组、List、Map或含有可写字段的应⽤程序专有的数据结构。通过这种⽅式,除⾮⾸次分配对象,否则不需要调⽤setAttribute。例如 HttpSession session = Session(); SomeMutableClass value =
(Attribute(“someIdentifier”); if(value = = null){ value = new SomeMutableClass(…);
session.setAttribute(“someIdentifier”,value); }else{ value.updateInternalAttribute(…); // 如果已经存在该对象则更新其属性⽽不需重新设置属性 }
*************************************************************************************
三⼗、不可更改对象和可更改对象在会话数据更新时的不同处理 *************************************************************************************
不可更改对象因为⼀旦创建之后就不能更改,所以每次要修改会话中属性的值的时候,都需要调⽤set
Attribute(“someIdentifier”,newValue)来代替原有的属性的值,否则属性的值不会被更新可更改对象因为其⾃⾝⼀般提供了修改⾃⾝属性的⽅法,所以每次要修改会话中属性的值
的时候,只要调⽤该可更改对象的相关修改⾃⾝属性的⽅法就可以了。这意味着我们就不需要调⽤setAttribute⽅法了*************************************************************************************
</div>
所有奥特曼</div>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论