java 网站cookie_JavaWeb之Cookie和Session

news/2024/5/20 23:51:56/文章来源:https://blog.csdn.net/weixin_39790760/article/details/114919978

七、Cookie和Session

目录:会话、Cookie、Session(重点)

1.会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个Web资源,关闭浏览器,这个过程可以称之为会话。

有状态会话:一位用户访问过某网站,下次再访问此网站,服务端会知道这个用户曾经来过,称之为有状态会话。

一个网站如何证明用户访问过?

①Cookie:服务端给客户端一个“信件”,客户端下次访问服务端带上“信件”就可以了。

②Session:服务器“登记”用户访问过了,下次用户访问的时候自动访问。

保存两种会话技术:

①Cookie:客户端技术。

②Session:服务器技术。利用这个技术可以保存用户的会话信息,可以把信息或者数据放在Session中。

常见场景:网站登录之后,下次不用再登录了,第二次访问就直接自动登录了。

2.Cookie

1)从请求中拿到Cookie信息

2)服务器响应给客户端Cookie

CookieDemo.java:

package com.ping.servlet;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import jave.io.IOException;

import java.io.PrintWriter;

public class CookieDemo extends HttpServlet {

//保存用户上一次访问的时间

@Override

protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException {

//解决中文乱码

req.setCharacterEncoding("utf-8");

resp.setCharacterEncoding("utf-8");

PrintWriter out = resp.getWriter();

//Cookie,服务器端从客户端获取

Cookie[] cookies = req.getCookies;//这里返回数组,说明Cookie可能存在多个

//判断Cookie是否存在

if(cookies!=null) {

out.write("你上一次访问的时间是:");

for(int i=0;i

Cookies cookie = cookies[i];

//获取cookie的名字

if(cookie.getName().equals("lastLogintTime")) {

//获取cookie中的值

long lastLoginTime = Long.parseLong(cookie.getValue());

Date date = new Date(lastLogintTime);

out.writer(date.toLocaleString());

}

}

}else {

out.write("这是您第一次访问本站");

}

//服务端给客户端响应一个cookie

Cookie cookie = new Cookie("lastLogintTime",System.currentTimeMillis()+" ");

//cookie有效期为1天

resp.addCookie(cookie);

}

@Override

protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException {…}

}

上述所使用的Cookie方法:

Cookie[] cookies = req.getCookies(); //获得Cookie

cookie.getName(); //获得Cookie中的key

cookie.getValue(); //获得Cookie中的value

new Cookie(); //新建一个Cookie

cookie.setMaxAge(); //设置Cookie的有效期

resp.addCookie(); //响应给客户端一个Cookie

Cookie一般会保存在本地的用户目录appdata下。

一个网站的Cookie是否存在上限?

①一个Cookie只能保存一个信息。

②一个Web站点可以给浏览器发送多个Cookie,最多存放20个Cookie。

③Cookie的大小有限制,为4kb。

④300个Cookie为浏览器的上限。

删除Cookie:

①不设置有效期,关闭浏览器就自动失效。

②设置有效期时间为0。

DeleteCookie.java

package com.ping.servlet;

import …

public class DeleteCookie extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException {

//创建一个Cookie,名字必须要和要删除的名字一致

Cookie cookie = new Cookie("lastLogintTime",System.currentTimeMillis()+" ");

//将Cookie有效期设置为0,立马过期

cookie.setMaxAge(0);

resp.addCookie(cookie);

}

@Override

protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException {

doGet(req,resp);

}

}

编码解码,来解决中文乱码问题:

URLEncoder.encode("ping","utf-8")//编码

URLDecoder.decode(cookie.getValue(),"utf-8")//解码

3.Session(重点)

1)什么是Session?

①服务器会给每一个用户(浏览器)创建一个Session对象。

②一个Session独占一个浏览器,只要浏览器没关闭,这个Session就存在。

③用户登录之后,整个网站它都可以访问。

2)HttpSession的重要方法

①getId():String:得到唯一标识符

②getServletContext():ServletContext:获得ServletContext

③getAttribute(String):Object:得到一个节点

④setAttribute(String,Object):void:用来设置属性

⑤removetAttribute(String):void:删除节点

⑥isNew():boolean:是否是新的

⑦invalidate():void:注销

3)Session使用场景

①保存一个登录用户的信息。

②如购物车信息等。

③整个网站中经常使用的数据。

……

4)使用Session

SessionDemo.java:

package com.kuang.servlet;

import com.kuang.pojo.Person;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.io.IOException;

public class SessionDemo extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//解决乱码问题

req.setCharacterEncoding("UTF-8");

resp.setCharacterEncoding("UTF-8");

resp.setContentType("text/html;charset=utf-8");

//得到Session

HttpSession session = req.getSession();

//给Session中存东西

session.setAttribute("name",new Person("秦疆",1));

//获取Session的ID

String sessionId = session.getId();

//判断Session是不是新创建

if (session.isNew()){

resp.getWriter().write("session创建成功,ID:"+sessionId);

}else {

resp.getWriter().write("session以及在服务器中存在,ID:"+sessionId);

}

//Session创建的时候所做的事情,会自动实现,不用编写如下代码

//Cookie cookie = new Cookie("JSESSIONID",sessionId);

//resp.addCookie(cookie);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doGet(req, resp);

}

}

GetSession.java:

package com.kuang.servlet;

import com.kuang.pojo.Person;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.io.IOException;

public class SessionDemo extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//解决乱码问题

req.setCharacterEncoding("UTF-8");

resp.setCharacterEncoding("UTF-8");

resp.setContentType("text/html;charset=utf-8");

//得到Session

HttpSession session = req.getSession();

Person person = (Person) session.getAttribute("name");

System.out.println(person.toString());

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {…}

}

DeleteSession.java:

package com.kuang.servlet;

import com.kuang.pojo.Person;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.io.IOException;

public class SessionDemo extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

HttpSession session = req.getSession();

session.removeAttribute("name");

//手动注销Session

session.invalidate();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {…}

}

web.xml配置会话自动过期:

15

所用的Person类,Person.java:

package com.ping.pojo;

public class Person {

private String name;

private int age;

public Person() {

}

public Person(String name,int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName() {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge() {

this.age = age;

}

@Override

public String toString() {

return "Person{"

"name='"+name+'\''+

",age="+age+

'}';

}

}

5)Session和Cookie的区别

①Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)。

②Session把用户的数据写到用户独占Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)。

③Session对象由服务器创建。

c913d2de938e

Session工作原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_726739.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SEO优化如何让提高收录量

相信在做SEO优化的网络人员来说,最高兴的时候就是看见自己辛苦打出来的文章被收录了。 可是,收录量就有点。。。。 今天,我就来教教大家怎么提高收录量,主要分四个方面。 1、收录网站的时间间隔 网站的重点是网站页面收录之间的时…

网站被黑提醒该站点可能受到黑客攻击,部分页面已被非法篡改...

大清早的一上班收到3个网站客户的QQ联系,说是自己公司的网站被跳转到了北京sai车,cai票,du博网站上去了,我们SINE安全公司对3个网站进行了详细的安全检测,发现这3个客户的网站都是同样的症状,网站首页文件i…

网站SEO优化如何让百度搜索引擎绝的你的网站更有抓取和收录价值呢?_孙森SEO...

今天孙森SEO为大家唠唠网站到底该如何优化才会让百度搜索引擎绝的你的网站更有抓取和收录价值呢? 第一方面:网站创造高品质的内容,可以为用户提供独特的价值. 1.百度作为搜索引擎,网站内容必须满足 搜索用户的需求 ,现…

大型网站技术架构(七)网站的可扩展性架构

2019独角兽企业重金招聘Python工程师标准>>> 扩展性是指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。 设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提供模块的复用性。模…

静态网站生成和部署(一)静态网站生成器 Gridsome

静态网站生成器 什么是静态网站生成器 使用一系列配置、模板以及数据,生成静态 HTML 文件及相关资源的工具由于它用来提前生成静态网页,所以这个功能也称为 预渲染生成的网站不需要类似 PHP 这样的服务器去部署运行只需要放到支持静态资源的 Web Serve…

静态网站生成和部署(二)项目构成和部署(Strapi + Vercle)

项目介绍 使用 Gridsome 创建项目模板参考 startbootstrap-clean-blog使用 Strapi 管理内容,提供 API 和 GraphQL查询 Gridsome 是静态站点生成器,打包时可以通过 API 或 GraphQL 获取动态数据,生成对应的静态文件。 例如:获取…

低级html5css3模板,45个高质量的 HTML5 和 CSS3 网站模板

今天为大家分享45个高质量的 HTML5 和 CSS3 网站模板,这将使你的网站开发更容易,更有趣。CSS3和HTML5是要设计一个非常时尚和新潮的网页设计之前必须要使用的方法,CSS3和HTML5提供的功能为用户提供强大功能。1. Vivid Photo: Free Photograph…

mysql数据库登陆地址_Php网站MySQL数据库四点:地址、数据库名、用户名和密码如何获取?...

我们每天都在使用的 wordpress网站 MySQL数据库四点:MySQL数据库地址、数据库、用户名和密码。 每个网站连接数据库都需要正确填写这四点,否则无法访问数据库。本文中老魏以 wordpress和宝塔面板为例,讲解如何获取数据库四点。本文主要是针对…

钉钉扫码登录网站(两种方式实现)

钉钉扫码登录网站(两种方式实现) 效果: 源代码地址:https://github.com/jellydong/DingQrCodeLogin 动手敲代码! 第一步,钉钉后台配置 参考链接:获取appId及appSecret. 点击进入钉钉开发者平台 的页面,点…

网站架构发展历程

注:本文摘自李智慧的《大型网站技术架构》 1.初始阶段的网站架构 小型互联网公司一般在最初阶段都是将:应用程序、数据库、文件等所有的资源都在一台服务器上。通常服务器操作系统使用Linux,应用程序使用PHP开发,然后部署在Apach…

c#http服务器源码,C# 自定义 HTTP服务器源码(可用于没有iis的情况下搭建站点)

HTTP服务器源码,可以实现POST模式收发,非常值得参考资源下载此资源下载价格为2D币,请先登录资源文件列表C# WebServer/bins/bins/BizApplication.dll , 21504C# WebServer/bins/bins/ComunicationLayer.dll , 5632C# WebServer/bins/bins/Dem…

tcp网站服务器编写,C#编写简单TCP服务器

【实例简介】【实例截图】【核心代码】using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading.Tasks;namespace TCP{class Program{static void Main(string[] args){Socket …

wordpress怎么搜索别人_wordpress深层seo优化技法:自定义栏目和tag标签页面title标题...

seo注重整站优化,也就是希望网站每个页面都参与进来,每个页面都有不同的title标题不重复。对于wordpress默认设置来说,这个基本上是ok的,不需要怎么折腾。但碰到一个问题是:网站栏目及标签页,承载着一些重要…

解决火车头7.6版本对一些https网站的采集报错问题

针对火车头7.6爬取https网站报错System.Net.HttpWebRequest问题的处理方案 1.先看看火车头7.6爬取https网站时出现的报错情况 System.Net.HttpWebRequest 2.废话不多说,先看看解决方案的效果,可以看到已经没有报错了,而且标题也采集到了(其它…

伪静态隐藏域名后缀_seo新手如何注册利于网站优化的域名?立刻分享

如何注册域名?选择比较好的域名服务商,输入合理的组成,选择适合的后缀。选中购买,支付成功后,就算彻底完成域名注册了。1、域名服务商简单来说,域名服务商,就是指能注册域名的地方。不同的服务商…

2012php网站搭建,Windows Server 2012 搭建PHP+MySQL环境

随着windows 8的发布,其服务器版本Windows Server 2012也相继推出,本篇将全面介绍如何在Windows Server 2012搭建phpmysql环境,同时也将介绍如何在Windows Server 2012中设定服务器站点的安全。1.添加IIS服务器角色点击任务栏左下角的“服务器…

mysql宕机时保存sql列表_MySQL的一条慢SQL查询导致整个网站宕机的解决方法

直接切入正题吧:通常来说,我们看到的慢查询一般还不致于导致挂站,顶多就是应用响应变慢不过这个恰好今天被我撞见了,一个慢查询把整个网站搞挂了先看看这个SQL张撒样子:# Query_time:70.472013Lock_time: 0.000078 Rows_sent: 791…

python爬虫自动登录网站_【实战】爬虫自动登录访问授权页面

概述:在人工智能来临的今天,数据显得格外重要。在互联网的浩瀚大海洋中,隐藏着无穷的数据和信息。因此学习网络爬虫是在今天立足的一项必备技能。本路线专门针对想要从事Python网络爬虫的同学而准备的,并且是严格按照企业的标准定…

某网站测试

我得到的只有一个后台网址,首先也就是信息搜集了。在网络空间安全搜索引擎fofa上查询一下,再就是端口扫描 ,直接略过说有利用价值的端口:80,81,1433,3389 脆弱点:http://49.xxx.xx.xxx:81/Login/index SQL注入post包(在…

免费申请Let's Encrypt HTTPS 证书(登陆网站和脚本两种方法)

方法一(要交互,成功率高) 申请过程 1.首先打开SSL For Free (https://www.sslforfree.com/)。 3.此时需要选择验证方式,分别为“自动FTP验证”(会要求输入FTP信息,担心安全的还是不要选择这一项)、“手动…