会话技术

  • 会话: 一次会话中包含多次请求和响应
  • 功能
  • 方式
  • Cookie
    • 基础使用步骤
      • 修改servlet模板代码,方便编程
      • 代码演示
  • Cookie实现原理
    • 因为cookie是基于响应头set_cookie实现的,因此我们可以直接通过设置响应头的方式,完成cookie的发送
    • 一旦发送给浏览器某个cookie对象后,那么在一次会话间,每次访问这个网站时,请求头中都会带上这个cookie对象
  • Cookie细节
    • 一次发送多个Cookie
    • Cookie在浏览器中保存的时间
      • cookie默认在会话期间有效,只要浏览器不关闭,cookie就存在,即cookie存在于浏览器的进程之中
      • cookie的修改和删除都是同名cookie覆盖
      • Cookie的持久化存储
    • Cookie能不能存储中文数据
    • Cookie共享问题
    • Cookie的特点和作用
    • 案例: 记住上一次访问时间
      • 注意: cookie不支持特殊字符,因此需要采用URL编码存储,用URL解码来解析
  • Session
    • 概念
    • 一次会话的概念
    • HttpSession对象---共享数据
    • Session原理
      • 如果第一次获取session,此时没有cookie,会创建一个session,然后将该session的id响应给浏览器,浏览器创建一个cookie来保存这个id
      • 如果第二次获取session,此时有cookie,便会去找cookie要来id,这样就可以在服务器端找到对应的session对象
      • 如果第二次获取session时,没了cookie,便会执行第一次获取session的步骤
      • 如果第一次访问index页面,因为session时内置对象,因此会创建一个session对象
    • 当客户端关闭后,服务器不关闭,两次获取session是否为同一个
      • 如果没有设置cookie的持久化保存,那么浏览器关闭后,cookie销毁,那么cookie里面记录的JSESSIONID也随之销毁,下次打开浏览器发现cookie没了,也就无法得到对应的cookie里面记录的JSESSIONID,那么就会新创建一个cookie,保存新创建的session的id
    • 客户端不关闭后,服务器关闭,两次获取session是否为同一个
    • Session被销毁时机
      • Session有默认的失效时间,服务器关闭session不会被销毁,并且可以有多个session同时存在的请求,因为浏览器每次关闭,再打开时,如果需要session对象,发现id没了,会新创建一个cookie保存新sesssion的id。那么之前cookie对象里面保存的id消失了,也就找不回原来的session,但是他还活着
  • session特点
  • session与cookie的区别
  • 验证码案例
    • 1.案例需求
    • 2.案例分析
    • 完整代码
  • 总结
  • 令牌机制

会话: 一次会话中包含多次请求和响应

一次会话: 浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止

功能

在一次会话的范围内的多次请求间共享数据

方式

  1. 客户端会话技术: cookie
    2.服务器端会话技术; session

Cookie

概念: 客户端会话技术,将数据保存到客户端

基础使用步骤

修改servlet模板代码,方便编程

第一步:

第二步:

第三步:


第四步:


代码演示

CookieServlet1: ---->发送Cookie方

@WebServlet("/CookieServlet1")
public class CookieServlet1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.创建Cookie对象Cookie c=new Cookie("msg","hello");//2.发送Cookieresponse.addCookie(c);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

CookieServlet1:接收Cookie方

@WebServlet("/CookieServlet")
public class CookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取CookieCookie[] cs = request.getCookies();if(cs!=null){for(Cookie c:cs){String name = c.getName();String value = c.getValue();System.out.println(name+" "+value);}}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}


Cookie实现原理

基于响应头set_cookie和请求头cookie实现

因为cookie是基于响应头set_cookie实现的,因此我们可以直接通过设置响应头的方式,完成cookie的发送

一旦发送给浏览器某个cookie对象后,那么在一次会话间,每次访问这个网站时,请求头中都会带上这个cookie对象


第一次访问服务器,响应头会返回 set-Cookie:

第二次访问,会带着上次请求返回的 Cookie 访问:

也需要注意,第一次 访问 Cookie1,接收到返回的 set-Cookie,第二次不是只有访问 cookie2 ,才能在响应头里看到Cookie,第二次访问哪个都会被携带,这里只是,我们在 Cookie2 这个页面设置了接收 Cookie 的数组,会被打印出来而已。


Cookie细节

一次发送多个Cookie

创建多个Cookie对象,使用response调用多次addcookie方法发送cookie即可

     //1.创建Cookie对象Cookie c=new Cookie("msg","hello");Cookie c1=new Cookie("msg","hello");//2.发送Cookieresponse.addCookie(c); response.addCookie(c1);

Cookie在浏览器中保存的时间

默认情况下,浏览器被关闭后,cookie数据被销毁

cookie默认在会话期间有效,只要浏览器不关闭,cookie就存在,即cookie存在于浏览器的进程之中

cookie的修改和删除都是同名cookie覆盖

Cookie的持久化存储

setMaxAge(int seconds)--->秒
  1. 正数: 将Cookie数据写到硬盘文件中,持久化存储. Cookie存活时间
  2. 负数:默认值,会话cookie,跟随浏览器的进程
  3. 0:删除Cookie信息

Cookie能不能存储中文数据

  • tomcat 8版本之前,Cookie中不能直接存储中文数据
    需要将中文数据转码,一般采用URL编码(%E3)
  • tomcat 8版本之后,Cookie中支持中文数据
    特殊字符还是不支持,建议使用URL编码存储,URL编码解析,例如空格

Cookie共享问题

1 假设在一个tomcat服务器中,部署了多个web项目,那么这些web项目中cookien能不能共享?

  • 默认情况下cookie不能共享
setPath(String path): 设置Cookie的共享范围. 默认情况下,设置为当前的虚拟目录

如果要共享,可以将Cookie设置为"/"

/----->当前项目的根路径—>localhost/

注意: 以上方法是用来解决同一个服务器下,多个web项目的Cookie共享问题


2 不同tomcat服务器间Cookie共享问题 ?

setDomain(String path):如果设置一级域名相同,那么多个服务器之间Cookie可以共享

例如:

setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中的Cookie可以共享

Cookie的特点和作用

特点:

  1. Cookie存储数据在客户端浏览器
  2. 浏览器对于单个Cookie的大小由限制(4kb),以及对同一域名下的总Cookie数量也有限制(20)

作用:

  1. Cookie一般用于存储少量的不太敏感的数据
  2. 在不登录的情况下,完成服务器对客户端的身份识别

案例: 记住上一次访问时间

注意: cookie不支持特殊字符,因此需要采用URL编码存储,用URL解码来解析

代码加注释:

package com.example.Cookie1;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;@WebServlet("/CookieServlet")
public class CookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置响应消息体的数据格式以及编码response.setContentType("text/html;charset=utf-8");//判断是否有cookie的值为lastTimeboolean flag=false;//获取所有CookieCookie[] cookies = request.getCookies();//遍历Cookie数组if(cookies!=null&&cookies.length>0){for(Cookie c:cookies){//获取cookie的名称String name = c.getName();//判断名称是否是lastTimeif("lastTime".equals(name)){//有该cookie,说明不是第一次访问flag=true;//有lastTime的cookie//响应数据//获取cookie的value---->时间String value = c.getValue();System.out.println("解码前:"+value);//URL: 解码value= URLDecoder.decode(value, "utf-8");System.out.println("解码后:"+value);response.getWriter().write("<h1>欢迎回来,您上一次访问的时间为:"+value+"</h1>");//设置Cookie的value//获取当前时间的字符串,重新设置cookie的值,重新发送cookieDate date = new Date();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年mm月dd日 HH:mm:ss");String format = simpleDateFormat.format(date);//URL编码System.out.println("编码前:  "+format);format=URLEncoder.encode(format,"utf-8");//System.out.println("编码后:"+format);//设置cookie的值c.setValue(format);//设置cookie的存活时间---一个月c.setMaxAge(60*60*24*30);//发送cookieresponse.addCookie(c);break;}}}if(cookies==null||cookies.length==0||flag==false){//没有,说明是第一次访问//设置Cookie的value//获取当前时间的字符串,重新设置cookie的值,重新发送cookieDate date = new Date();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年mm月dd日 HH:mm:ss");String format = simpleDateFormat.format(date);Cookie c=new Cookie("lastTime",format);//URL编码System.out.println("编码前:  "+format);format=URLEncoder.encode(format,"utf-8");//System.out.println("编码后:"+format);//设置cookie的值c.setValue(format);//设置cookie的存活时间---一个月c.setMaxAge(60*60*24*30);//发送cookieresponse.addCookie(c);response.getWriter().write("<h1>欢迎首次访问</h1>");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}


Session

概念

服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。 HttpSession

一次会话的概念

一次会话,什么是一次会话呢?我举个例子:就我们现在上网,打开浏览器浏览网站当时开始到你关闭浏览器,就称之为一次会话;

HttpSession对象—共享数据

1 获取HttpSession对象

 request.getsession()

2 使用HttpSession对象

Object getAttribute(String name)
void setAttribute(String name,Object value)
void removeAttribute(String name)

代码演示:

Demo1Servlet :

@WebServlet("/SessionDemo1")
public class SessionDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//使用session共享数据//1.获取session数据HttpSession session = request.getSession();//2.存储数据session.setAttribute("msg","大忽悠");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

Demo2Servlet:

@WebServlet("/SessionDemo2")
public class SessionDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获取sessionHttpSession session = request.getSession();//2.获取数据Object msg = session.getAttribute("msg");System.out.println(msg);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}


Session原理

如果第一次获取session,此时没有cookie,会创建一个session,然后将该session的id响应给浏览器,浏览器创建一个cookie来保存这个id

如果第二次获取session,此时有cookie,便会去找cookie要来id,这样就可以在服务器端找到对应的session对象

如果第二次获取session时,没了cookie,便会执行第一次获取session的步骤

如果第一次访问index页面,因为session时内置对象,因此会创建一个session对象

Session的实现是依赖与Cookie的


当客户端关闭后,服务器不关闭,两次获取session是否为同一个

如果没有设置cookie的持久化保存,那么浏览器关闭后,cookie销毁,那么cookie里面记录的JSESSIONID也随之销毁,下次打开浏览器发现cookie没了,也就无法得到对应的cookie里面记录的JSESSIONID,那么就会新创建一个cookie,保存新创建的session的id

默认情况下不是,因为客户端关闭后,一次会话就结束了.

如果需要相同,则可以创建Cookie,键为JSESSIONID,让Cookie持久化保存

代码演示:

         //1.获取sessionHttpSession session = request.getSession();Cookie c=new Cookie("JSESSIONID",session.getId());c.setMaxAge(60*60);response.addCookie(c);//2.获取数据Object msg = session.getAttribute("msg");System.out.println(msg);

客户端不关闭后,服务器关闭,两次获取session是否为同一个

不是同一个,但是要确保数据不丢失

1.session钝化: 在服务器正常关闭之前,将session对象系列化到硬盘上

2.session活化: 在服务器启动后,将session文件转化为内存中的session对象即可

tomcat服务器会自动完成钝化和活化过程,但是IDEA不会,因此一般将项目直接放到tmocat的webapps目录下


Session被销毁时机

Session有默认的失效时间,服务器关闭session不会被销毁,并且可以有多个session同时存在的请求,因为浏览器每次关闭,再打开时,如果需要session对象,发现id没了,会新创建一个cookie保存新sesssion的id。那么之前cookie对象里面保存的id消失了,也就找不回原来的session,但是他还活着

session对象调用invalidate()来销毁自己

session默认失效时间为30分钟

我们可以对默认失效时间进行修改:

web.xml配置文件目录,大概500-600多行:


session特点

  1. session用于存储一次会话的多次请求的数据,存储在服务器端
  2. session可以存储任意类型,任意大小的数据

session与cookie的区别

  1. session存储数据在服务器端,cookie在客户端
  2. session没有数据大小限制,而cookie有
  3. session数据安全,cookie相对于不安全

验证码案例

1.案例需求

2.案例分析


在访问浏览器时,会有两个请求,因为验证码图片试一次单独的请求

完整代码


需要导入的jar包:

配置文件:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///test1
username=root
password=xxxx
#初始化连接数量
initialSize=5
#最大连接数
maxActive=10
#最大等待时间
maxWait=3000

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>战地六游戏官网</title><script>window.onload=function(){document.getElementById("img").onclick=function (){this.src="/ZhanDi/CheckCodeServlet?time="+new Date().getTime();}}</script><style>div{color: red;}</style>
</head>
<body><form action="/ZhanDi/LoginServlet" method="get"><table><tr><th>用户名:</th><td><input type="text" placeholder="请输入用户名" name="username"></td></tr><tr><th>密码:</th><td><input type="password" placeholder="请输入密码" name="password"></td></tr><tr><th>验证码:</th><td><input type="text" placeholder="请输入验证码" name="checkcode"></td></tr><tr><td colspan="2"> <img id="img" src="/ZhanDi/CheckCodeServlet"></td></tr><tr><td colspan="2"> <input type="submit" value="登录"></td></tr></table></form><div><%=request.getAttribute("yzm_error")==null?"":request.getAttribute("yzm_error")%></div><div><%=request.getAttribute("dl_error")==null?"":request.getAttribute("dl_error")%></div>
</body>
</html>

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>战地1</title>
</head>
<body>
<h1>欢迎回来,<%=request.getSession().getAttribute("user")%></h1><br><img src="/zd.png"/>
</body>
</html>

CheckCode目录下:

1.CheckCodeServlet

package Checkcode;import javax.imageio.ImageIO;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;@WebServlet("/CheckCodeServlet")
public class CheckCodeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int width=150;int height=50;//1.在内存中创建一个图片----创建一个不带透明色的对象BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//2.填充背景色Graphics g=image.getGraphics();//画笔对象g.setColor(Color.PINK);g.fillRect(0,0,width,height);//3.画边框g.setColor(Color.BLUE);g.drawRect(0,0,width-1,height-1);//4.随机生成验证码String str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";Random ran=new Random();StringBuilder sb=new StringBuilder();for(int i=1;i<=4;i++){//生成随机角标int index=ran.nextInt(str.length());//获取字符char ch=str.charAt(index);//将每个验证码字符加入sb中sb.append(ch);//写验证码g.drawString(ch+" ",width/5*i,height/2);}//获取验证码字符串String checkCode_session= sb.toString();//将验证码存入sessionrequest.getSession().setAttribute("checkCode_session",checkCode_session);//7.画干扰线//随机生成坐标点for(int i=0;i<4;i++){int x1=ran.nextInt(width);int x2=ran.nextInt(width);int y1=ran.nextInt(height);int y2=ran.nextInt(height);g.setColor(Color.RED);g.drawLine(x1,y1,x2,y2);}//8.将图片输出到页面上----第二个参数是后缀名,第三个参数是一个输出流ImageIO.write(image,"jpg",response.getOutputStream());}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

2.loginServlet

package Checkcode;import mySQL.UserDao;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置request编码----和页面的编码统一request.setCharacterEncoding("utf-8");//获取参数MapMap<String, String[]> parameterMap = request.getParameterMap();//创建User对象User user=new User();//使用BeanUtils工具类的populate方法将map集合封装成一个user对象try {BeanUtils.populate(user,parameterMap);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//判断验证码输入的是否正确//1.先获取程序生成的验证码HttpSession session = request.getSession();String checkCode_session = (String)session.getAttribute("checkCode_session");//删除session中存储的验证码,确保验证码是一次性的session.removeAttribute("checkCode_session");//测试代码System.out.println("程序生成的验证码:"+checkCode_session);System.out.println("用户输入的验证码:"+user.getCheckcode());System.out.println("用户名:"+user.getUsername()+"  "+"密码:"+user.getPassword());//验证码忽略大小写if(checkCode_session!=null&&checkCode_session.equalsIgnoreCase(user.getCheckcode())){System.out.println("验证码正确");//验证码正确//判断用户名和密码是否一致//通过在数据库中查询来判断User u=UserDao.check(user);if(u!=null&&user.getUsername().equals(u.getUsername())&&user.getPassword().equals(u.getPassword())){System.out.println("登录成功");//登录成功//存储用户信息---两次请求,要把信息存储到session里面session.setAttribute("user",user.getUsername());//重定向到success.jsp---动态获取虚拟目录response.sendRedirect(request.getContextPath()+"/success.jsp");}else{System.out.println("登录失败");//登录失败//存储信息到requestrequest.setAttribute("dl_error","用户名或密码错误");//转发到登录页面request.getRequestDispatcher("/login.jsp").forward(request,response);}}else{//验证码不一致//存储提示信息到request,然后在页面上面显示request.setAttribute("yzm_error","验证码错误");//转发到登录页面----不需要写虚拟目录request.getRequestDispatcher("/login.jsp").forward(request,response);}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

3.user

package Checkcode;public class User {private String username;private  String password;private  String checkcode;public User() {}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getCheckcode() {return checkcode;}public void setCheckcode(String checkcode) {this.checkcode = checkcode;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +", checkcode='" + checkcode + '\'' +'}';}
}

MySQL:

JDBCUtils:

package mySQL;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;public class JDBCUtils {//1.定义成员变量private static DataSource ds;static {try {//1.加载配置文件Properties pro=new Properties();pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));//2.获取DataSourceds= DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}//获取连接public static Connection getConnection() throws SQLException {return ds.getConnection();}//释放资源public static void close(ResultSet res,Statement stmt, Connection conn){if(res!=null){try {res.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if(stmt!=null){try {stmt.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}}}public static void close(Statement stmt, Connection conn){close(null,stmt,conn);}public static  DataSource getDataSource(){return ds;}}

UserDao

package mySQL;import Checkcode.User;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;/*
*在mysql数据库中查询相关的用户
* */
public class UserDao
{//声明JDBCTemplate对象共用static private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());//查询用户static public User check(User loginuser){try{//编写查询的sql语句String sql="select* from loginuser where username= ? and password= ?";//调用query方法---返回一个查到的user对象---user对象唯一,因此使用queryForObject返回查询到的唯一的user对象//该方法必须返回一个结果,否则报错User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), loginuser.getUsername(),loginuser.getPassword());System.out.println("数据库查到对应用户");return user;}catch (DataAccessException e){//没有查询到System.out.println("数据库没有查到对应用户");return null;}}}

注意:

效果演示:




总结




cookie失效就好像客户(浏览器)把银行卡丢了(cookie失效了),但是银行(服务器端)里面还有对应的账号存在

为了防止弄丢银行卡,因此需要告诫客户好好保存(cookie持久化技术)

session失效就好像银行账号失效了(session失效),虽然客户(浏览器)有卡(cookie没有失效)但是卡已经用不了


令牌机制


java 防止表单的重复提交-令牌机制

会话技术知识点整理(Cookie和Session)相关推荐

  1. 鉴权必须了解的5个知识点:cookie,session,token,jwt,单点登录

    从状态说起 [HTTP 无状态] 我们知道,HTTP是无状态的,也就是说,HTTP请求方和响应方间无法维护状态,都是一次性的,它不知道前后的请求都发生了什么 但有的场景下,我们需要维护状态,最常见的, ...

  2. 微机原理与接口技术知识点整理复习--纯手打

    关注公众号,回复"微机必考",免费获取文件版资源,方便打印,方便随时阅读. 明天就要考试了,来一波知识点整理.都会了,期末考试你不过你来找我! 第一章 1.按微处理器的字节分类 4 ...

  3. Http会话保持机制:Cookie、Session和Token

    前言:在 Web 应用中,用户的认证和鉴权是非常重要的一环.HTTP 是一个无状态的协议,一次请求结束后,下次在发送服务器就不知道这个请求是谁发来的了(同一个 IP 不代表同一个用户),这样就无法确定 ...

  4. php session 不通过cookie_PHP会话控制机制中,Cookie和Session的应用,你更喜欢谁

    会话控制是一种面向连接的可靠通信方式,通常根据会话控制记录判断用户登录的行为. 为什么要使用会话控制 我们在上网时,访问每一个网页都需要使用HTTP协议来进行交互.但是HTTP协议是无状态协议,也就是 ...

  5. php动态网页技术难点及分析,动态网页技术PHP关于cookie和session的分析

    1. PHP的COOKIE cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制. PHP在http协议的头信息里发送cookie, 因此 setcookie() 函数必须在其它信息 ...

  6. javaWeb之Cookie和Session

    会话技术 在了解cookie和session之前,需要先了解一个概念:会话 1. 概念 在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话.web应用中的会话过程类似于生活中的 ...

  7. Servlet之Cookie和Session

    会话技术 在了解cookie和session之前,需要先了解一个概念:会话 1. 概念 在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话.web应用中的会话过程类似于生活中的 ...

  8. Java会话技术之 —— Spring Session

    前言 在上一篇我们聊到了会话技术的基础原理中session和cookie的使用,基于cookie和session可以实现客户端(浏览器)和服务端的会话存储,从请求的无状态变为一定程度的有状态,在文章最 ...

  9. 爬虫-cookie和session、数据、正则表达式

    一.cookie和session 产生的原因: 由于http是一个无状态的协议每次请求需要之前请求的一些信息,此时必须重新发送之前的请求.为了解决这种问题,产生了一种记录状态的技术,就是cookie和 ...

最新文章

  1. 博客域名改为http://bobli.cnblogs.com
  2. GIT:本地有更改,但强制作远程仓库里作更新
  3. pip Python 包安装和管理工具
  4. android imap开发,企业邮箱在Android(安卓)系统手机上POP3/IMAP协议如何设置
  5. 扫描PDF417崩溃的原因找到:手机摄像头分辨率低
  6. 滑动翻页效果_Flutter实现3D效果,一个字,炫!
  7. 使用实例 ---- 使用NUnit在.Net编程中进行单元测试
  8. python文本聚类dbscan_文本挖掘之文本聚类(DBSCAN)
  9. css inset属性
  10. Vmware Workstation 无法连接到虚拟机,请确保您有权运行该程序。
  11. 交大『云观CD-ROMIII』直接由CD-ROM执行之安装法(转)
  12. 【刷机】LG G2 能进入recovery但是不能进入新系统,can't open file ,G2刷TOT
  13. Vue的模板语法及案例
  14. Excel如何批量在空白单元格录入相同内容
  15. Python基础知识回顾
  16. Linux cp命令的使用方法与参数含义
  17. 1u服务器最多多少内存条,高密度节省空间 四款1U机架式服务器推荐
  18. 矩阵求导技巧-YX拉伸法
  19. underscore随机数
  20. 如何高效查看 Docker 日志

热门文章

  1. 几种将十进制数转化成为二进制数的方法
  2. 中国工业感应炉市场深度研究分析报告
  3. CSS——在HTML中引入CSS的四种方式
  4. ANA 2 优化版含预设 – Sonic Academy ANA 2 Bundle v2.0.94 WiN
  5. PHP 的运行方式有哪些?
  6. 主板上集成显卡的计算机在进行显示,怎么查看自己电脑主板是否集成显卡
  7. 两个小程序(刷人气)
  8. 旷视科技Face++联手vivo掀起美学革命 AI智能助推vivo X23全方位进阶
  9. 适合下雪天发朋友圈的文案句子
  10. java windows wifi密码_java 获取本机连接过的所有WiFI密码