zoukankan      html  css  js  c++  java
  • jsp课程笔记之session(一)

    4.session :会话

    • a.浏览网站:开始-关闭
    • b.购物: 浏览、付款、退出
    • c.电子邮件:浏览、写邮件、退出
      开始-结束
    session机制:

    在这里插入图片描述

    • 客户端第一次请求服务端时,(jsessionid-sessionid)服务端会产生一个session对象(用于保存该客户的信息);
    • 并且每个session对象 都会有一个唯一的 sessionId( 用于区分其他session);
    • 服务端由会 产生一个cookie,并且 该cookie的name=JSESSIONID ,value=服务端sessionId的值;
    • 然后 服务端会在 响应客户端的同时 将该cookie发送给客户端,至此 客户端就有了 一个cookie(JSESSIONID);
    • 因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID(客户端) - sessionID(服务端))

    客户端第二/n次请求服务端时:服务端会先用客户端cookie种的JSESSIONID 去服务端的session中匹配sessionid,如果匹配成功(cookie jsessionid和sesion sessionid),说明此用户 不是第一次访问,无需登录;

    • 例子:
      客户端: 顾客(客户端)
      服务端: 存包处 - 商场(服务端)

    顾客第一次存包:商场 判断此人是 之前已经存过包(通过你手里是否有钥匙)。
    如果是新顾客(没钥匙) ,分配一个钥匙 给该顾客; 钥匙 会和 柜子 一一对应;

    第二/n次 存包:商场 判断此人是 之前已经存过包(通过你手里是否有钥匙)
    如果是老顾客(有钥匙),则不需要分配;该顾客手里的钥匙 会 和柜子 自动一一对应。
    在这里插入图片描述

    session机制补充:

    • a. session存储在服务端
    • b. session是在 同一个用户(客户)请求时 共享
    • c. 实现机制:第一次客户请求时 产生一个sessionid 并复制给 cookie的jsessionid 然后发给客户端。最终 通过session的sessionid-cookie的jsessionid

    session方法:

    String getId() :获取sessionId
    boolean isNew() :判断是否是 新用户(第一次访问)
    void invalidate():使session失效 (退出登录、注销会用到)

    void setAttribute()
    Object getAttribute();

    void setMaxInactiveInterval(秒) :设置最大有效 非活动时间
    int getMaxInactiveInterval():获取最大有效 非活动时间

    • session示例: 登录
      在这里插入图片描述

    在这里插入图片描述

    案例:
    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>Insert title here</title>
    </head>
    <body>
    	<form action="check.jsp" method="post">
    		用户名:<input type="text" name="uname"><br/>
    		密码:<input type="password" name="upwd"><br/>
    		<input type="submit" value="登陆"><br/>
    	</form>
    </body>
    </html>
    

    check.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>Insert title here</title>
    </head>
    <body>
    		<%
    			request.setCharacterEncoding("utf-8") ;
    			String name = request.getParameter("uname");
    			String pwd = request.getParameter("upwd");
    			if(name.equals("zs") && pwd.equals("abc")){//假设 zs abc
    				//只有登录成功,session中才会存在uname /upwd
    				session.setAttribute("uname", name)		 ;
    				session.setAttribute("upwd", pwd)		;
    				System.out.println("sessionId"+session.getId());
    				
    				
    				
    				session.setMaxInactiveInterval(10) ;//10秒
    				
    				request.getRequestDispatcher("welcome.jsp").forward(request, response) ;
    				
    			
    			}else{
    				//登录失败
    				response.sendRedirect("login.jsp") ;
    			}
    		
    		%>
    </body>
    </html>
    

    welocame.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>Insert title here</title>
    </head>
    <body>
    	欢迎您:
    		<%
    			String name = (String)session.getAttribute("uname") ;
    			//如果 用户没有登录,而是直接 通过地址栏 访问welcome.jsp,则必然获取到的name是null
    			if(name!=null){
    				out.print(name);
    				
    				
    				System.out.println();
    		%>
    		<%
    				
    			}else{//如果没有登录,应该跳转登录页面
    				response.sendRedirect("login.jsp");
    			}
    			
    		
    		%>
    </body>
    </html>
    

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    wpf学习笔记StackPanel
    wpf学习笔记DockPanel
    wpf学习笔记Viewbox
    C#.NET 中的类型转换
    超简单U盘PE启动完全攻略(U盘上仅四个文件)
    Web 应用的 UML 建模与 .NET 框架开发
    100多个很有用的JavaScript函数以及基础写法大集合
    Asp.net(C#)显示所有缓存 清除所有缓存
    grub引导U盘(集成常用工具/深山红叶PE工具箱V30/完美者U盘维护系统V8.1)
    GRUB启动命令详解
  • 原文地址:https://www.cnblogs.com/xdr630/p/15255108.html
Copyright © 2011-2022 走看看