• cookie的使用


    为什么要有cookie 

    当用户在发送一个请求关得到返回信息之后,客户端与服务器端之间的网络连接就已经
    断开了,在下一个请求发送时,服务器无法确定这次请求和上次的请求是否来自同一个客

    户端。也就是说,服务器不能记住"记住"用户,这是hptp协议的限制。在web应用程序中,

    实际上是经常需要记住每次请求的。那么,如何让服务器知道不同的请求是否来自同一个

    客户端,就是状态管理问题出现了session和cookie

    状态管理
    分为客户端和服务器端

    服务器端:状态信息保存在服务器端,session (其它:Application,HttpContext,Cache


    客户端:状态信息保存在客户端,cookie (QueryString,ViewState,ControlState,隐藏域

    )

    当客户端向服务器发送请求时,状态信息也随之发送到服务端,从而起到验证客户端来路

    的目的。
    客户端状态不如服务器端的安全性和可靠性高,但服务器端状态会占用服务器端资源,影

    响服务器性能。

    Session session超过之前    数据大小不限,建议数据尽量少

    cookie 可编程控制         数据受cookie大小限制

    具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮

    机制,他需要用户打开客户端的cookie支持。

    而session机制采用的是一种在客户端与服务器之间保持状态的解决方案。同时我们也看到

    ,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能

    需要借助于cookie机制来达到保存标识的目的。而session提供了方便管理全局变量的方式
    session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个

    用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用

    cookie时,这个值也可能设置为由get来返回给服务器。
    就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,

    建议在服务器端的SESSION机制更安全些.因为它不会任意读取客户存储的信息。

    正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行

    特殊的指示以提示浏览器按照指示生成相应的cookie
    从网络服务器观点看所有HTTP请求都独立于先前请求。就是说每一个HTTP响应完全依赖于

    相应请求中包含的信息
    状态管理机制克服了HTTP的一些限制并允许网络客户端及服务器端维护请求间的关系。在

    这种关系维持的期间叫做会话(session)。
    Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。IETF

    RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头向

    客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件

    ,它会自动将同一服务器的任何请求缚上这些cookies

    二:cookie使用 

    1、创建一个新的Cookie

             Cookie cookie = new Cookie("username",name);

    2、设置cookie在客户端上存活多久

             cookie.setMaxAge(30*60);

    3、把cookie发送到客户

             response.addCookie(cookie);

    4、从客户请求得到cookie(或多个cookie)

             Cookie[]    cookies=request.getCookies();

             for(int i=0-;i<cookies.length;i++){

                           Cookie cookie=cookies[i];

                           out.println(cookie.getName()+":"+cookie.getValue())

                     }

    五:cookieUtil的使用

      1 package com.channel.sys.common.utils;
      2 
      3 import java.io.UnsupportedEncodingException;
      4 import java.net.URLDecoder;
      5 import java.net.URLEncoder;
      6 
      7 import javax.servlet.http.Cookie;
      8 import javax.servlet.http.HttpServletRequest;
      9 import javax.servlet.http.HttpServletResponse;
     10 
     11 /**
     12  * Cookie工具类
     13  * @author ThinkGem
     14  * @version 2013-01-15
     15  */
     16 public class CookieUtils {
     17 
     18     /**
     19      * 设置 Cookie(生成时间为1天)
     20      * @param name 名称
     21      * @param value 值
     22      */
     23     public static void setCookie(HttpServletResponse response, String name, String value) {
     24         setCookie(response, name, value, 60*60*24);
     25     }
     26     
     27     /**
     28      * 设置 Cookie
     29      * @param name 名称
     30      * @param value 值
     31      * @param maxAge 生存时间(单位秒)
     32      * @param uri 路径
     33      */
     34     public static void setCookie(HttpServletResponse response, String name, String value, String path) {
     35         setCookie(response, name, value, path, 60*60*24);
     36     }
     37     
     38     /**
     39      * 设置 Cookie
     40      * @param name 名称
     41      * @param value 值
     42      * @param maxAge 生存时间(单位秒)
     43      * @param uri 路径
     44      */
     45     public static void setCookie(HttpServletResponse response, String name, String value, int maxAge) {
     46         setCookie(response, name, value, "/", maxAge);
     47     }
     48     
     49     /**
     50      * 设置 Cookie
     51      * @param name 名称
     52      * @param value 值
     53      * @param maxAge 生存时间(单位秒)
     54      * @param uri 路径
     55      */
     56     public static void setCookie(HttpServletResponse response, String name, String value, String path, int maxAge) {
     57         Cookie cookie = new Cookie(name, null);
     58         cookie.setPath(path);
     59         cookie.setMaxAge(maxAge);
     60         try {
     61             cookie.setValue(URLEncoder.encode(value, "utf-8"));
     62         } catch (UnsupportedEncodingException e) {
     63             e.printStackTrace();
     64         }
     65         response.addCookie(cookie);
     66     }
     67     
     68     /**
     69      * 获得指定Cookie的值
     70      * @param name 名称
     71      * @return 72      */
     73     public static String getCookie(HttpServletRequest request, String name) {
     74         return getCookie(request, null, name, false);
     75     }
     76     /**
     77      * 获得指定Cookie的值,并删除。
     78      * @param name 名称
     79      * @return 80      */
     81     public static String getCookie(HttpServletRequest request, HttpServletResponse response, String name) {
     82         return getCookie(request, response, name, true);
     83     }
     84     /**
     85      * 获得指定Cookie的值
     86      * @param request 请求对象
     87      * @param response 响应对象
     88      * @param name 名字
     89      * @param isRemove 是否移除
     90      * @return 91      */
     92     public static String getCookie(HttpServletRequest request, HttpServletResponse response, String name, boolean isRemove) {
     93         String value = null;
     94         Cookie[] cookies = request.getCookies();
     95         if (cookies != null) {
     96             for (Cookie cookie : cookies) {
     97                 if (cookie.getName().equals(name)) {
     98                     try {
     99                         value = URLDecoder.decode(cookie.getValue(), "utf-8");
    100                     } catch (UnsupportedEncodingException e) {
    101                         e.printStackTrace();
    102                     }
    103                     if (isRemove) {
    104                         cookie.setMaxAge(0);
    105                         response.addCookie(cookie);
    106                     }
    107                 }
    108             }
    109         }
    110         return value;
    111     }
    112 }
     1 /**
     2  * Created by zhanglw6 on 2017/11/30.
     3  */
     4 define('app/jsp/common/documentCookie', function (require, exports, module) {
     5     var $=require('jquery');
     6 
     7     
     8     function getCookieInner(name)//供内部调用
     9     {
    10         var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
    11         if (arr != null)
    12             return unescape(arr[2]);
    13         return null;
    14     }
    15     
    16     //构造并存储cookie
    17     exports.setCookie=function(name, value)// 两个参数,一个是cookie的名子,一个是值
    18     {
    19         var Days = 30; // 此 cookie 将被保存 30 天
    20         var exp = new Date(); // new Date("December 31, 9998");
    21         exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
    22         document.cookie = name + "=" + escape(value) + ";expires="
    23                 + exp.toGMTString();
    24     },
    25 
    26     //从cookie中取出一个参数
    27     exports.getCookie=function(name)// 取cookies函数
    28     {
    29         var arr = document.cookie
    30                 .match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
    31         if (arr != null)
    32             return unescape(arr[2]);
    33         return null;
    34 
    35     }
    36     
    37     //删除coolie
    38     exports.delCookie=function(name)
    39     {
    40         var exp = new Date();
    41         exp.setTime(exp.getTime() - 1);
    42         var cval = getCookieInner(name);
    43         if (cval != null)
    44             document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
    45     }
    46     
    47     
    48 });
    开启打怪升级之旅
  • 相关阅读:
    获取图片的大小(宽高):BytesIO
    python中url解析 or url的base64编码
    [extjs5学习笔记]第三十七节 Extjs6预览版都有神马新东西
    【翻译】Ext JS 6早期访问版本发布
    【翻译】Ext JS 6有什么新东西?
    【Java二十周年】Delphi转行java的一些小感触
    Cursor类取出数据
    通过服务修改widgetUI
    安卓笔记--Style的继承
    [ExtJS5学习笔记]第三十六节 报表组件mzPivotGrid
  • 原文地址:https://www.cnblogs.com/zhangliwei/p/8016616.html
Copyright © 2020-2023  润新知