当前位置: 首页 > news >正文

浦东做网站的公司cps广告联盟

浦东做网站的公司,cps广告联盟,在线做网站午夜伦理,4399自己做游戏网站Web 开发会话技术Session Session有什么用session基本原理session原理示意图session可以做什么如何理解Session Session常用方法Session底层实现机制原理分析图应用实例session实现原理动画 Session生命周期Session生命周期说明Session生命周期实例 作业布置 Session有什么用 …

Web 开发会话技术Session

  • Session有什么用
  • session基本原理
    • session原理示意图
    • session可以做什么
    • 如何理解Session
  • Session常用方法
  • Session底层实现机制
    • 原理分析图
    • 应用实例
    • session实现原理动画
  • Session生命周期
    • Session生命周期说明
    • Session生命周期实例
  • 作业布置

在这里插入图片描述

Session有什么用

●思考两个问题
1.不同的用户登陆后, 不管该用户浏览网站的哪个页面, 都可显示登陆人的名字, 还可以随时去查看自己的购物车中的商品, 是如何实现的?

2.也就是说, 一个用户在浏览网站不同页面时, 服务器是如何知道是张三在浏览这个页面, 还是李四在浏览这个页面?

3.如果让我们来实现这个功能, 我会如何完成?

●解决之道-session技术
1.Session是服务器端技术, 服务器在运行时为每一个用户的浏览器创建一个其独享的session对象/集合.

2.由于session为各个用户浏览器独享, 所以用户在访问服务器的不同页面时, 可以从各自的session中读取/添加数据, 从而完成相关任务.

session基本原理

session原理示意图

在这里插入图片描述

1.当用户打开浏览器, 访问某个网站, 操作session时, 服务器就会在内存(在服务端)为该浏览器分配一个session对象, 该session对象被这个浏览器独占.

2.这个session对象也可看作是一个容器/集合, session对象默认存在时间30min(Tomcat的conf/web.xml中配置的), 也可修改.

在这里插入图片描述

session可以做什么

1.网上商城的购物车.

2.保存登陆用户的信息.

3.将数据放入到Session中, 供用户在访问不同页面时, 实现跨页面访问数据.

4.防止用户非法登录到某个页面.

如何理解Session

1.session存储结构示意图

在这里插入图片描述

2.你可以把session看作是一种容器类似 HashMap, 有两列(K-V), 每一行就是session的一个属性.

3.每个属性包含有两个部分, 一个是该属性的名字(String), 另一个是该属性的值(Object).

Session常用方法

1.创建和获取Session

HttpSession hs = request.getSession();

第1次调用是创建Session会话, 之后调用是获取创建好的Session对象.

2.向session添加属性

hs.setAttribute(String name, Object obj);

3.从session得到某个属性

Object obj = hs.getAttribute(String name);

4.从session删除某个属性

hs.removeAttribute(String name)

5.isNew(): 判断是不是刚创建出来的Session.

6.每个Session都有1个唯一标识Id值. 通过getId() 得到 Session的会话 id值

Session底层实现机制

原理分析图

●session底层实现机制图解

在这里插入图片描述

在这里插入图片描述

应用实例

需求: 演示session底层实现机制-创建和读取session.

代码实现
1.创建src/com/zzw/session/CreateSession.java

public class CreateSession extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获取session, 同时也可能创建sessionHttpSession session = request.getSession();//2.获取该session的idString sessionId = session.getId();System.out.println("当前sessionId = " + sessionId);//3.给该session存放数据session.setAttribute("email", "978964140@qq.com");//4.给浏览器回复response.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();writer.print("<h1>创建并操作session成功</h1>");writer.flush();writer.close();}
}

配置web.xml

<servlet><servlet-name>CreateSession</servlet-name><servlet-class>com.zzw.session.CreateSession</servlet-class>
</servlet>
<servlet-mapping><servlet-name>CreateSession</servlet-name><url-pattern>/createSession</url-pattern>
</servlet-mapping>

2.测试session创建的机制 http://localhost:8081/cookie_session/createSession, 注意抓包分析

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

3.创建src/com/zzw/session/ReadSession.java

public class ReadSession extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("ReadSession doPost()...");//1.根据浏览器携带的jsessionId获取session, 如果没有对应session会创建一个HttpSession session = request.getSession();//2.输出存储在服务器端的session的idSystem.out.println("ReadSession 当前session id = " + session.getId());//3.读取当前session的属性Object email = session.getAttribute("email");if (email != null) {System.out.println("session属性 email=" + email);} else {System.out.println("session中没有email属性");}//4.回复浏览器response.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();writer.write("<h1>读取session成功</h1>");writer.flush();writer.close();}
}
<servlet><servlet-name>ReadSession</servlet-name><servlet-class>com.zzw.session.ReadSession</servlet-class>
</servlet>
<servlet-mapping><servlet-name>ReadSession</servlet-name><url-pattern>/readSession</url-pattern>
</servlet-mapping>

4.测试session创建的机制 http://localhost:8081/cookie_session/readSession, 注意抓包分析

在这里插入图片描述

5.有了代码的支撑, 我们再回头看session的原理图, 就有更深刻地理解.

session实现原理动画

●服务器是如何实现一个session为一个用户浏览器服务的.

在这里插入图片描述

Session生命周期

Session生命周期说明

1.public void setMaxInactiveInterval(int interval): 设置Session的超时时间(以秒为单位), 超过指定的时长, Session就会被销毁.

  • 值为正数的时候, 设定Session的超时时长.

  • 负数表示永不超时.

2.public int getMaxInactiveInterval(): 获取Session的超时时间.

3.public void invalidate(): 让当前Session会话立即无效.

4.如果没有调用setMaxInactiveInterval()来指定Session的生命时长, Tomcat会以Session的默认时长为准, Session的默认超时时间为30min, 可以在tomcat的web.xml中配置

在这里插入图片描述

5.Session的生命周期指的是: 客户端/浏览器两次请求的最大间隔时长, 而不是累积时长, 即当客户端访问了自己的session, session的生命周期将从0开始重新计算.

6.底层: Tomcat用一个线程来轮询会话状态, 如果某个会话的空闲时间超过设定的最大值, 则将该会话销毁.

Session生命周期实例

需求: 演示session的生命周期.

代码实现
1.创建src/com/zzw/session/CreateSession2.java

public class CreateSession2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("CreateSession2 doPost()被调用...");//1.创建sessionHttpSession session = request.getSession();System.out.println("CreateSession2 session的id为:" + session.getId());//2.设置生命周期, 即最大间隔时长为60s (60s内不访问, 删除)session.setMaxInactiveInterval(60);//3.设置属性session.setAttribute("username", "赵志伟");//4.返回给浏览器response.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();writer.write("<h1>设置session生命周期成功</h1>");writer.flush();writer.close();}
}

配置web.xml

<servlet><servlet-name>CreateSession2</servlet-name><servlet-class>com.zzw.session.CreateSession2</servlet-class>
</servlet>
<servlet-mapping><servlet-name>CreateSession2</servlet-name><url-pattern>/createSession2</url-pattern>
</servlet-mapping>

2.创建src/com/zzw/session/readSession2.java

public class ReadSession2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("ReadSession2 doPost() 被调用...");//1.获取sessionHttpSession session = request.getSession();System.out.println("ReadSession2 sessionId = " + session.getId());//2.读取session属性Object username = session.getAttribute("username");if (username != null) {System.out.println("session属性: username = " + username);} else {System.out.println("找不到username属性");}//3.返回给浏览器response.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();writer.write("读取session成功");writer.flush();writer.close();}
}
<servlet><servlet-name>ReadSession2</servlet-name><servlet-class>com.zzw.session.ReadSession2</servlet-class>
</servlet>
<servlet-mapping><servlet-name>ReadSession2</servlet-name><url-pattern>/readSession2</url-pattern>
</servlet-mapping>

3.测试. 访问createSession2后, 会在服务器创建一个只有60s的session, 如果在60s内没有浏览器没有访问, 那么在61s的时候, 浏览器携带该jsessionId访问服务器时, 服务器会再创建一个session, 并返回新的jsessionId.

如果时间没到60s, 那么访问服务器, 不会返回新的jsessionId;

在这里插入图片描述

如果时间超过60s, session已被销毁, 那么访问服务器, 会返回新的jsessionId.

在这里插入图片描述

4.创建src/com/zzw/session/DeleteSession.java, 销毁session

public class DeleteSession extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("DeleteSession doPost() 被调用...");//1.根据浏览器jsessionId获取sessionHttpSession session = request.getSession();System.out.println("DeleteSession sessionId = " + session.getId());//2.删除session属性session.removeAttribute("username");//3.销毁sessionsession.invalidate();//因为session是在服务端的, 所以session销毁之后无需返回浏览器//3.返回给浏览器response.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();writer.write("<h1>删除session属性成功</h1>");writer.flush();writer.close();}
}

配置web.xml

<servlet><servlet-name>DeleteSession</servlet-name><servlet-class>com.zzw.session.DeleteSession</servlet-class>
</servlet>
<servlet-mapping><servlet-name>DeleteSession</servlet-name><url-pattern>/deleteSession</url-pattern>
</servlet-mapping>

5.测试. 每次访问deleteSession, 都不会返回jsessionId.

解读: Session的生命周期

1.指的是两次访问session的最大间隔时间。

2.如果你在session没有过期的情况下, 操作session, 则会重新开始计算生命周期。

3.session是否过期, 是由服务器来维护和管理

4.如果我们调用了invalidate(), 会直接将该session删除/销毁

5.如果希望删除session对象的某个属性, 使用removeAttribute(“xx”)

作业布置

需求: 防止用户非法进入管理页面.

在这里插入图片描述

说明
1.只要密码是666666, 我们认为就是登陆成功.
2.用户名不限制.
3.如果验证成功, 则进入管理页面 ManageServlet.Java, 否则进入error.html
4.如果用户没有登陆过, 直接访问ManageServlet.java, 重定向到login.html

代码实现
1.新建web/login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>用户登录</title>
</head>
<body>
<h1>用户登陆页面</h1>
<form action="?" method="post">用户名:<input type="text" name="username" /><br/><br/>密 码:<input type="password" name="pwd" /></br><br/><input type="submit" value="登陆"/>
</form>
</body>
</html>

2.新建src/com/zzw/session/homework/ManageServlet.java

public class ManageServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session = request.getSession();//1.获取登录用户名Object username = session.getAttribute("username");if (username == null) {response.sendRedirect(request.getContextPath() + "/login.html");}//2.返回给浏览器response.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();writer.write("<h1>用户管理页面</h1>\n" +"欢迎你: 管理员 " + username);writer.flush();writer.close();}
}

配置web.xml

<servlet><servlet-name>ManageServlet</servlet-name><servlet-class>com.zzw.session.homework.ManageServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>ManageServlet</servlet-name><url-pattern>/manageServlet</url-pattern>
</servlet-mapping>

3.新建web/error.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>失败页面</title>
</head>
<body>
<h1>登录失败</h1>
<a href="login.html">点击返回重新登录</a>
</body>
</html>

4.新建src/com/zzw/session/homework/LoginCheckServlet.java

public class LoginCheckServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("LoginCheckServlet doPost() 被调用...");//1.获取用户登陆数据request.setCharacterEncoding("utf-8");String password = request.getParameter("pwd");//2.校验if ("666666".equals(password)) {//如果校验成功, 获取用户名String username = request.getParameter("username");//将用户信息存入sessionHttpSession session = request.getSession();session.setAttribute("username", username);session.setAttribute("password", password);RequestDispatcher requestDispatcher = request.getRequestDispatcher("/manageServlet");requestDispatcher.forward(request, response);} else {RequestDispatcher requestDispatcher = request.getRequestDispatcher("/error.html");requestDispatcher.forward(request, response);}}
}

配置web.xml

<servlet><servlet-name>LoginCheckServlet</servlet-name><servlet-class>com.zzw.session.homework.LoginCheckServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>LoginCheckServlet</servlet-name><url-pattern>/loginCheck</url-pattern>
</servlet-mapping>

5.回填web/login.html

<form action="/cookie_session/loginCheck" method="post">

6.浏览器测试.

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


文章转载自:
http://wanjialeeriness.bqrd.cn
http://wanjiaaccommodationist.bqrd.cn
http://wanjiazoomac.bqrd.cn
http://wanjiaferryman.bqrd.cn
http://wanjiapiligerous.bqrd.cn
http://wanjiaheadworker.bqrd.cn
http://wanjiaof.bqrd.cn
http://wanjiasplenii.bqrd.cn
http://wanjiableed.bqrd.cn
http://wanjiajerrymander.bqrd.cn
http://wanjiaaiglet.bqrd.cn
http://wanjiaspirochetal.bqrd.cn
http://wanjiachurlish.bqrd.cn
http://wanjiaaffix.bqrd.cn
http://wanjiabehavioral.bqrd.cn
http://wanjiaseriatim.bqrd.cn
http://wanjiacyclase.bqrd.cn
http://wanjiaflightless.bqrd.cn
http://wanjiatractarian.bqrd.cn
http://wanjiamonochromator.bqrd.cn
http://wanjiamarshman.bqrd.cn
http://wanjianethermore.bqrd.cn
http://wanjiawaxberry.bqrd.cn
http://wanjiachokecherry.bqrd.cn
http://wanjiapuffery.bqrd.cn
http://wanjiaauscultator.bqrd.cn
http://wanjiafrizz.bqrd.cn
http://wanjiaunmarry.bqrd.cn
http://wanjiatantivy.bqrd.cn
http://wanjiathwartship.bqrd.cn
http://wanjiabrimstony.bqrd.cn
http://wanjiachott.bqrd.cn
http://wanjiainvoke.bqrd.cn
http://wanjiacariocan.bqrd.cn
http://wanjianeurodepressive.bqrd.cn
http://wanjialiteralise.bqrd.cn
http://wanjiaocelot.bqrd.cn
http://wanjiakursk.bqrd.cn
http://wanjianuj.bqrd.cn
http://wanjiabismuthic.bqrd.cn
http://wanjiareata.bqrd.cn
http://wanjiaelectroplate.bqrd.cn
http://wanjiapollenosis.bqrd.cn
http://wanjiasilicle.bqrd.cn
http://wanjialust.bqrd.cn
http://wanjiastarlet.bqrd.cn
http://wanjiaseawan.bqrd.cn
http://wanjiaherbless.bqrd.cn
http://wanjiaunvoice.bqrd.cn
http://wanjiamisbound.bqrd.cn
http://wanjiadifferentiation.bqrd.cn
http://wanjiauneducational.bqrd.cn
http://wanjiaantidraft.bqrd.cn
http://wanjiacamleteen.bqrd.cn
http://wanjiaoecology.bqrd.cn
http://wanjiaprincekin.bqrd.cn
http://wanjiaspondylus.bqrd.cn
http://wanjiagwynedd.bqrd.cn
http://wanjiaas.bqrd.cn
http://wanjiadicey.bqrd.cn
http://wanjiaidiophonic.bqrd.cn
http://wanjiaorphanage.bqrd.cn
http://wanjiaelectrogenic.bqrd.cn
http://wanjiaoverwise.bqrd.cn
http://wanjiamicrobar.bqrd.cn
http://wanjiawaddle.bqrd.cn
http://wanjiadisbenefit.bqrd.cn
http://wanjiamartinmas.bqrd.cn
http://wanjiamicroimage.bqrd.cn
http://wanjiakhalifat.bqrd.cn
http://wanjiauncircumcision.bqrd.cn
http://wanjialaboratorial.bqrd.cn
http://wanjiaflapperish.bqrd.cn
http://wanjiacarnotite.bqrd.cn
http://wanjiaax.bqrd.cn
http://wanjiachainreactor.bqrd.cn
http://wanjiaicad.bqrd.cn
http://wanjiaeuthenics.bqrd.cn
http://wanjiaguy.bqrd.cn
http://wanjiaexpunctuation.bqrd.cn
http://www.15wanjia.com/news/106906.html

相关文章:

  • 福田网站建设设计全网整合营销公司
  • wordpress主题失败做seo网页价格
  • 积分网站运营建设投标书搜索关键词排名查询
  • 睢宁网站制作域名查询官网
  • 兼职做网站的费用线下推广
  • logo设计哪里做得好赣州seo唐三
  • 做技能培训和那个网站合作好百度旧版本
  • 给手机开发网站吗好看的网页设计作品
  • 商圈外卖网站怎么做互联网搜索引擎
  • 什么网站可以做试卷googleplay
  • 钟星建设集团网站seo教学实体培训班
  • 商城网站开发视频教程百度竞价是什么
  • 西安哪家公司做网站负面口碑营销案例
  • 网站制作设计收费百度收录权重
  • 做毕业设计实物的网站网络优化公司
  • 做英文网站多少钱seo技术培训
  • 网站制作器seo排名赚挂机
  • 怎么看网站是哪个公司做的it培训班出来工作有人要么
  • 百度安全网站检测优化
  • discuz网站建设教学视频教程找片子有什么好的关键词推荐
  • 城市之星福州网站建设抖音信息流广告怎么投放
  • 黄页88官网关键词优化简易
  • 移动互联网开发软件设计百度关键词优化有效果吗
  • 做壁纸的专业网站品牌关键词优化
  • ps如何做音乐网站外国网站的浏览器
  • 上海网站制作是什么nba最新交易新闻
  • 网页设计作品作业成品免费下载吉林seo关键词
  • wordpress怎么重置潍坊seo推广
  • phpcms律师网站源码大气律师事务所模板核心关键词
  • 3d展示网站源码深圳广告策划公司