cookie的使用

Posted 小小虫飞飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 });

 

以上是关于cookie的使用的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript单行代码,也就是代码片段

XSS:如何从 C# 中的字符串中删除 JS 片段?

Django cookie 横幅:window.wpcc 未定义

根据 ASP.NET 中的角色设置身份验证 cookie 超时长度

最详细的cookie和浏览隐私之间的关系

c#如何采集需要登录的页面