【非原创】原文链接:https://www.cnblogs.com/myfrank/p/7243597.html
目录
Session常用方法
session对象用来保存一些在与每个用户回话期间需要保存的数据信息,这样就方便了回话期间的一些处理程序。如可以用session变量记住用户的用户名,以后就不必在其他的网页中重复输入了。session对象的信息保存在服务器中,但ID保存在客户机的Cookie中,如果客户机不支持Cookie则转为URL重写,一般在使用session对象时不必考虑其实现的细节问题。
当用户关闭了所有某个web服务器上的网页时,则此服务器与客户机的session对象以及其变量会自动消失。
JSP实现
实例一:记住回话的用户名
sessionUserLogin.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<script language="javascript">
function on_submit(){//验证数据的合法性
if (form1.username.value == ""){
alert("用户名不能为空,请输入用户名!");
form1.username.focus();
return false;
}
if (form1.userpassword.value == ""){
alert("用户密码不能为空,请输入密码!");
form1.userpassword.focus();
return false;
}
}
</script>
<%!
public String codeToString(String str){//处理中文字符串的函数
String s=str;
try{
byte tempB[]=s.getBytes("ISO-8859-1");
s=new String(tempB);
return s;
}catch(Exception e){
return s;
}
}
%>
<%
String username=request.getParameter("username");
String userpassword=request.getParameter("userpassword");
if(username!=null&userpassword!=null){
//如果用户名和密码都合法,则记下用户名,一般把用户和密码存在数据库中,
//用数据库中的信息与提交的用户名和密码比较以进行用户合法性检查,
//这些内容在后续章节中会继续学习
session.setAttribute("username",codeToString(username));
response.sendRedirect("sessionUserLogin1.jsp");
}
%>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<table aligin="center">
<form name="form1" method="post" action="sessionUserLogin.jsp"
onsubmit="return on_submit()">
<tr aligin="center">
<td>
用户登录
</td>
</tr>
<tr aligin="center">
<td>
请输入用户名:<input type="text" name="username" size="20">
</td>
</tr>
<tr aligin="center">
<td>
请输入密码: <input type="password" name="userpassword" size="20">
</td>
</tr>
<tr aligin="center">
<td>
<input type="submit" value="提交" name="B1">
<input type="reset" value="全部重写" name="B2">
</td>
</tr>
</form>
</table>
</body>
</html>
运行,然后输入,结果如下:
sessionUserLogin1.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>用户登录成功</title>
</head>
<body>
用户登录成功!<br>
你的用户名是:<%=(String)session.getAttribute("username")%>
</table>
</body>
</html>
点击上面的“提交”,可以得到结果如下:
Servlet实现
实例二:服务器实现一个sension为一个用户浏览器服务
服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。可以用如下的代码证明:
package yqq.request.study;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class SessionDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF=8");
response.setContentType("text/html;charset=UTF-8");
//使用request对象的getSession()获取session,如果session不存在则创建一个
HttpSession session = request.getSession();
//将数据存储到session中
session.setAttribute("data", "随意填写");
//获取session的Id
String sessionId = session.getId();
//判断session是不是新创建的
if (session.isNew()) {
response.getWriter().print("session创建成功,session的id是:"+sessionId);
}else {
response.getWriter().print("服务器已经存在该session了,session的id是:"+sessionId);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
第一次访问时,服务器会创建一个新的sesion,并且把session的Id以cookie的形式发送给客户端浏览器
运行结果如下:
可以看出,不同客户端(浏览器)访问结果的session的id不同,并且第一次访问为session创建成功,第二次访问服务器已经存在该session,同一浏览器多次访问id不变。