zoukankan      html  css  js  c++  java
  • 会话

      什么是会话?
        会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
        会话是访问特定web站点时用户执行的一组活动,记住不同会话过程称为会话跟踪。
      会话过程中要解决的一些问题?
        每个用户与服务器进行交互的过程中,各自会有一些数据,程序要想办法保存每个用户的数据。
        例如:用户点击超链接通过一个servlet购买了一个商品,程序应该保存用户购买的商品,以便于用户点结帐servlet时,结帐servlet可以得到用户商品为用户结帐。


      Cookie
        Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这 样, web资源处理的就是用户各自的数据了。

    Session
        Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

    会话:当访问web资源之后,通过连接继续请求当前站点的资源,然后关闭浏览器的整个过程。
    会话技术:cookie、session
    cookie:将服务器的数据保存到浏览器端的技术
      要求保存数据:服务器
      保存数据:浏览器
        IE;将cookie保存到指定目录中,以文件的形式存储
        火狐或谷歌:将cookie保存到指定的文件中
      使用HTTP协议进行通信
    会话级cookie:当整个会话结束后,cookie信息将被删除(cookie在内存中)
    持久化cookie:将cookie保存到硬盘中
        setMaxAge
        单位:秒
        如果设置的值为零,则进行删除操作。
    request.getCookies();获得当前web项目的所有的cookie信息
      获得当前浏览器中的cookie
      获得当前servlet所在目录,以及之上的所有目录下的cookie信息
      通过setPath可以设置cookie的访问路径
      在cookie中存放中文
        编码:String returnData = URLEncoder.encode(data, "UTF-8");
        解码:String value = URLDecoder.decode(c.getValue(), "UTF-8");

    package cn.itcast.cookie;
    
    import java.io.IOException;
    import java.net.URLDecoder;
    import java.net.URLEncoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class CnCookieServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            this.doPost(request, response);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            //String[]  -- byte[]
            //"中文".getBytes("UTF-8") -- byte[] -- > 12,45,67,98
            //12,45,67,98  --> String[] -- byte[]  -- new String()
            
            
            
            //读取cookie
            Cookie[] cookies = request.getCookies();
            if(cookies != null){
                for(Cookie c : cookies){
                    System.out.println(c.getName() + ":" + c.getValue());
                    //获得cn的值,然后解码
                    if("cn".equals(c.getName())){
                        String value = URLDecoder.decode(c.getValue(), "UTF-8");
                        System.out.println(value);
                    }
                }
            }
            
            
            String data = "中文";
            String returnData  = URLEncoder.encode(data, "UTF-8");  //base64
            
            Cookie cookie = new Cookie("cn",returnData);
            
            response.addCookie(cookie);
            
            
    
        }
    
    }



        cookie的value可以设置多少个字符:4kb
    session:服务器在服务器端创建一个内存区域,用来存放当前用户的所有信息,通过cookie关联。
      前提:必须使用cookie
      session:
        tomcat创建
          销毁:30分钟
     URL重写
       一般情况选择encodeURL
      两个方法区别在于,如果参数为空字符串,返回结果不同。
    public String encodeURL(String url) {

    String absolute = toAbsolute(url);
    if (isEncodeable(absolute)) {
    // W3c spec clearly said
    if (url.equalsIgnoreCase("")){ //
    url = absolute;
    }
    return (toEncoded(url, request.getSessionInternal().getIdInternal()));
    } else {
    return (url);
    }

    }

    public String encodeRedirectURL(String url) {

    if (isEncodeable(toAbsolute(url))) {
    return (toEncoded(url, request.getSessionInternal().getIdInternal()));
    } else {
    return (url);
    }

    }
    注意:参数url必须有效,否则返回没有改变的URL
    当使用"/"开头,相对于web站点
    response.encodeURL("/day07/urlSessionServlet2")
    /day07/urlSessionServlet2;jsessionid=F85DB5EFDDB9A6B170AF2B4959EFC4FC
    获得Web的绝对路径
    String absolute = toAbsolute(url);
    http://localhost:8080/day07/
    总结:
    需要考虑用户的Cookie是否禁用了
    将所有的链接全部进行URL重写(过滤器)

  • 相关阅读:
    NOI Online 2020 提高组游记
    【HDU5840】This world need more Zhu
    CSP-S 2019 AFO记
    防错笔记
    关于Blog
    题解 【UER #6】逃跑
    动态规划杂题选记
    有趣计数题选做
    题解 [POI2012] Leveling Ground
    xioa han 带画家!
  • 原文地址:https://www.cnblogs.com/xuyatao/p/6652181.html
Copyright © 2011-2022 走看看