jsp04状态管理
1.http 协议的无状态性
无状态是指,当浏览器发送请求给服务器的时候,服务器会响应。但当同一个浏览器再次发送请求时,服务器不会知道是刚才那个浏览器。
简单说,服务器【不会保存用户状态】,不会记得客户端是否访问过,所以这就是无状态协议
2.保存用户的两大机制
Session-保存在服务器端
Cookie-保存在客户端
3.Cookie 技术
3.1Cookie :中文名称为“小甜饼”,是web服务器保存在客户端的一系列文本信息。
3.2使用场景:
(1)、判断用户是否已登录,n天内保存登录状态。
(2)“购物车”处理。
(3)、保存浏览记录。
缺点:容易泄露用户信息。


3.3Cookie 的作用
(1)对特定对象的追踪;
(2)保存用户网页浏览记录与习惯;
( 3)简化登录。
(4)安全风险:容易泄露用户信息
3.4Jsp 中创建与使用Cookie
1)创建Cookie对象
Cookie newCookie = new Cookie(String key , Object value);
2)写入Cookie对象
response.addCookie(newCookie);
3)读取Cookie对象
Cookie[] cookies = request.getCookies();
3.5Cookie 的常用方法
| 类型 | 方法名 | 方法解释 |
| String | getComment() | 返回cookie中注释,如果没有注释的话将返回空值. |
| String | getDomain() | 返回cookie中Cookie适用的域名. 使用getDomain() 方法可以指示浏览器把Cookie返回给同 一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始(例如.yesky.com) |
| int | getMaxAge() | 返回Cookie过期之前的最大时间,以秒计算。 |
| String | getName() | 返回Cookie的名字。名字和值是我们始终关心的两个部分,笔者会在后面详细介绍 getName/setName。 |
| String | getPath() | 返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下 的所有页面。 |
| boolean | getSecure() | 如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。 |
| String | getValue() | 返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。 |
| int | getVersion() | 返回Cookie所遵从的协议版本。 |
| void | setComment(String purpose) | 设置cookie中注释。 |
| void | setDomain(String pattern) | 设置cookie中Cookie适用的域名 |
| void | setMaxAge(int expiry) | 以秒计算,设置Cookie过期时间。 |
| void | setPath(String uri) | 指定Cookie适用的路径。 |
| void | setSecure(boolean flag) | 指出浏览器使用的安全协议,例如HTTPS或SSL。 |
| void | setValue(String newValue) | cookie创建后设置一个新的值。 |
| void | setVersion(int v) | 设置Cookie所遵从的协议版本。 |
3.6 Cookie的代码实例:
(1)案例:十天免登陆
//login.jsp 登陆页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>表单提交</title>
</head>
<body>
<%
String username = ""; String password = ""; Cookie[] cks = request.getCookies();
if (cks != null && cks.length > 0) {
for (Cookie c : cks) {
if (c.getName().equals("username")) {
username = c.getValue();
}
if (c.getName().equals("password")) {
password = c.getValue();
}
} }
%> <h1>post</h1>
<form action="dologin.jsp" name="loginForm" method="post">
<table>
<tr>
<td>账号:</td>
<td><input type="text" name="username" value="<%=username%>" /></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" value="<%=password%>" /></td>
</tr>
<tr>
<td colspan="2"><input type="checkbox" checked="checked"
name="isUseCookie" value="十天内记住我的登陆状态" />十天内记住我的登陆状态</td>
</tr>
<br>
<tr> <td><input type="submit" value="提交" /></td> </tr>
</table>
</form> // dolphin.jsp 处理登陆页面
<%@page import="java.net.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h1> doLogin </h1>
<%
request.setCharacterEncoding("UTF-8");
String username = ""; String password = "";
//处理中文乱码 (加编码)
username =URLEncoder.encode(request.getParameter("username"),"UTF-8") ;
password=URLEncoder.encode(request.getParameter("password"),"UTF-8") ; password = request.getParameter("password");
String [] isUseCookie = request.getParameterValues("isUseCookie"); if(isUseCookie !=null && isUseCookie.length>0){
//说明勾选了
Cookie ck_username= new Cookie("username",username);
Cookie ck_password= new Cookie("password",password);
//设置Cookie 的有效期,以秒为单位
ck_username.setMaxAge(60*60*24*10);//10天=864000秒 ck_password.setMaxAge(864000);
//写入Cookie 对象
response.addCookie(ck_username);
response.addCookie(ck_password);
}else{ //如果说没有勾选
Cookie [] ck=request.getCookies();//读取Cookie 对象
for(Cookie c : ck){
if(c.getName().equals("username")
|| c.getName().equals("password")){
//因为不保存,设为马上过期
c.setMaxAge(0); response.addCookie(c);//因为要覆盖之前的
}
} } %> //index.jsp 查看Cookie 数据的页面
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <%
request.setCharacterEncoding("UTF-8");
String username = ""; String password = ""; Cookie[] cks = request.getCookies();
if (cks != null && cks.length > 0) {
for (Cookie c : cks) {
if (c.getName().equals("username")) {
//处理中文乱码(解码)
username = URLDecoder.decode(c.getValue(),"UTF-8");
}
if (c.getName().equals("password")) {
password = URLDecoder.decode(c.getValue(),"UTF-8");
}
} }
%>
cookie中的用户名:<%=username %>
cookie中的密码:<%=password %>
3.7 Session 与 Cookie 的对比
1.保存位置:session在服务器端内存,cookie在客户端文本
2.保存对象:session保存Object类(保存对象大小没有限制),cookie保存String类型(保存对象大小有限制)
3.生存权:session会话结束即销毁,cookie可以长期保存在客户端
4.重要性:session安全性更高,保存重要信息,cookie保存不重要的信息

jsp04状态管理的更多相关文章
- Redux状态管理方法与实例
状态管理是目前构建单页应用中不可或缺的一环,也是值得花时间学习的知识点.React官方推荐我们使用Redux来管理我们的React应用,同时也提供了Redux的文档来供我们学习,中文版地址为http: ...
- 表格搞定 Asp.net Web 状态管理
最近在网上搜罗了 ASP.NET WEB 状态管理方面的一些内容,终于把这些内容整合总结了一下. 1. 希望自己通过整理,能够掌握一些,为自己投资. 2. 以便自己忘记,又要浪费时间搜罗. 3. 希望 ...
- [译]面向初学者的Asp.Net状态管理技术
介绍 本文主要讲解Asp.Net应用程序中的状态管理技术(Asp.Net中有多种状态管理技术),并批判性地分析所有状态管理技术的优缺点. 背景 HTTP是无状态的协议.客户端发起一个请求,服务器响应完 ...
- [Asp.Net]状态管理(Session、Application、Cache)
上篇博文介绍了在客户端状态管理的两种方式:http://www.cnblogs.com/wolf-sun/p/3329773.html.除了在客户端上保存状态外,还可以在服务器上保存状态.使用客户端的 ...
- [Asp.Net]状态管理(ViewState、Cookie)
简介 HTTP协议是无状态的.从客户端到服务器的连接可以在每个请求之后关闭.但是一般需要把一些客户端信息从一个页面传送给另一个页面. 无状态的根本原因是:浏览器和服务器使用Socket通信,服务器将请 ...
- HttpClient_HttpClient 4.3.6 HTTP状态管理
HTTP状态管理 最初的HTTP被设计成以状态.请求/应答为导向的协议,它被制作成是没有特殊条款的,以便在状态会话中能交换逻辑关系请求/应答.HTTP协议越来越受欢迎和被采用,越来越多的系统会在应用程 ...
- Ansible状态管理
转载自:http://xdays.me/ansible状态管理.html 简介 就像所有服务器批量管理工具(puppet有DSL,salt有state)一样,ansible也有自己的状态管理组件 ...
- ASP.NET状态管理详解,让你明明白白
开发WinFrom的程序员可能不会在意维护应用程序的状态,因为WinFrom本身就在客户端运行,可以直接在内存中维护其应用程序状态.但ASP.NET应用程序在服务器端运行,客户端使用无状态的http协 ...
- 状态管理cookie 案例
1状态管理:服务器为了追踪同一个客户端发出的请求,将多次交互看成一个整体看待 2:cookie的生存时间,默认情况下,cookie保存在浏览器内存中,只要不关闭浏览器,cookie就一直存在 如果希望 ...
随机推荐
- C中的除法,商和余数的大小、符号如何确定
对于C中的除法,商和余数的大小.符号是如何确定的呢?在C89中,只规定了如果两个数为正整数,那么余数的符号为正,并且商的值是接近真实值的最大整数.比如5 / 2,那么商就是2,余数就是1.但是,C89 ...
- 《梦断代码Dreaming In Code》阅读笔记(一)
第0章!干得漂亮! 这是我看到这本书冒出来的第一个想法.身为计算机系的学生,对于从0开始的任何事情,都感到格外亲切. 进入阅读之后,疑惑.惊讶.感叹渐渐取代了之前轻松的心情,原来做软件竟是攀越一座又一 ...
- Android 数据存储 之 SQLite数据库详解
. 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19028665 . SQLiteDataBase示例程序下 ...
- JavaScript初探系列之面向对象
面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装.继承.多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义J ...
- Linux系统的性能测试
性能测试:CPU内存,硬盘IO读写,带宽速度,UnixBench 一.CPU物理个数.内核.超线程.多核心 1.登录Terminal,执行:cat /proc/cpuinfo,就会显示出主机的CPU详 ...
- solr 学习之solrJ
solrJ是访问Solr服务的JAVA客户端,提供索引和搜索的请求方法,SolrJ通常嵌入在业务系统中,通过solrJ的API接口操作Solr服务. <!-- https://mvnreposi ...
- mysql突然无法启动的问题
经常会有这样一个情况是:mysql跑了一段时间后,某一天我们需要重启服务的时候,发现停止后并不能正常启动,会报下面这种错误 这种情况发生的原因绝大多数都是权限的问题: 因为使用了一段时间后,使用期间表 ...
- ajax 请求 后台返回的文件流
download(url) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); // 也可以使用POST方式,根据接口 xhr. ...
- 【MVC】ASP.NET MVC5 使用MiniProfiler 监控MVC性能
MiniProfiler ,一个简单而有效的迷你剖析器,可以有效的实时监控页面.通过直接引用.Ajax.Iframe形式访问的其它页面进行监控,监控内容包括数据库内容,并可以显示数据库访问的SQL. ...
- 【bzoj1858】[Scoi2010]序列操作 线段树区间合并
题目描述 lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b 把[a, b]区间内的所有数全变成0 1 a b ...