关于cookie的一些事
关于cookie的一些事
转自:http://blog.csdn.net/yunnysunny/article/details/7748106
cookie是实现web中用户状态维护的基础。我们常见的session也是在客户端浏览器中保存一个cookie信息,里面含sessionid数据,而在服务器端有一段与此sessionid关联的数据,这段数据可以存在服务器硬盘上,也可以序列化后存储在服务器的内存中,如果自己实现session过程的话,甚至可以存储在数据库或者nosql中。在做session验证的时候,正式用此sessionid去查找服务器上的相应信息。
cookie的属性
在理解cookie之前,先得介绍一下它的几个属性。
|
属性 |
介绍 |
|
name |
cookie的名字 |
|
value |
cookie的取值 |
|
expires |
过期时间,如果这个属性不指定的话,就是“session cookie”,也就是这个session在关闭浏览器后会被删除 |
|
path |
cookie的作用域,子文件夹下的网页可以访问父文件夹下的网页生成的cookie,但是反过来却不能。例如在/路径下生成了cookie_a,在/sub路径下生成了cookie_b,则/路径下只能读取cookie_a,而/sub路径下可以读取cookie_a和cookie_b。注意,如果不设置这个属性的话,默认使用的是当前的url的相对路径,例如在url http://www.a.com/some/page.php中设置cookie时没有指定path路径,则它的path属性为/some。一般我们设置cookie,就是让网站中所有其他的网页都能读取到的,所以应该将其设置为'/'。 |
|
domain |
cookie的所属域名,默认是全域名,例如www.somesite.com。当然也可以自己指定根域名,即.somesite.com(注意不是somesite.com,前面加一个点才是正确的),这样的话如果当前网站旗下有子域名网站的话,例如a.somesite.com b.somesite.com之类的子域名,那么在子域名所在网站中也能读取这个cookie。 |
|
secure |
这个属性是针对https来说的,如果设定其为true的话,那么只有在请求当前网站的https的地址的时候,才能读取出来。 |
|
httponly |
这个属性设置js对于当前cookie的读取权限,如果为true,则js无法读取修改当前cookie |
cookie使用的注意事项:
1.cookie的value内容中是无法使用特殊字符和中文的。不支持的特殊字符有空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号,冒号,分号等(以上符号是cookie的
version 0 版本的情况,不同服务器支持的情况不同,有些特殊符号在支持version
1版本的服务器上是支持的),如果使用这些符号,cookie内容就会被截断,服务器会丢弃特殊符号和特殊符号之后的内容。所以在使用的时候要对其进行转义,js中可以使用escape和unescape;jsp中可以使用URLEncode和URLDecode(这两个函数可以自行设置编码);php中使用urlencode和urldecode(这两个函数内部使用gb2312进行中文转化)。如果遇到用js设置cookie,在后台读取的情况,js端可以用encodeURIComponent进行转码(这个函数使用utf-8进行中文转化)。
2.在服务器端的对网页A设置了cookie,如果使用浏览器回退功能,回退到的页面B上,是读取不到刚才设置的cookie的,这种情况下必须手动刷新浏览器才能得到A页面设置的cookie。在某些服务器上即使使用js跳转到B页面也读取不到cookie,而且这种情况在php的服务器上出现,所以对于设置cookie后的操作最好采用服务器端语言进行浏览器跳转,比如php中的header函数。
下面有图有真相
1)来自firebug中的cookies
2) 来自google浏览器的cookies ,和firefox大同小异了
说明: 服务器端 session存在在 /tmp/ 中,其 存储值是经过序列化的,如下:
[root@elastix82 tmp]# ls sess_*
sess_555 sess_bhgup7d2lepdmh599klide9ul5 sess_hcqsd43ar55q8em2mmae513vv4
[root@elastix82 tmp]#
[root@elastix82 tmp]# cat sess_hcqsd43ar55q8em2mmae513vv4
elastix_user|s:5:"admin";elastix_pass|s:32:"21232f297a57a5a743894a0e4a801fc3";menu|s:8:"calendar";dashboard|a:5:{s:22:"Applet_SystemResources";b:1;s:22:"Applet_ProcessesStatus";b:1;s:17:"Applet_HardDrives";b:1;s:25:"Applet_PerformanceGraphic";b:1;s:11:"Applet_News";b:1;}[root@elastix82 tmp]#
[root@elastix82 tmp]#
关于cookie的一些事的更多相关文章
- 用户登录之cookie信息安全一二事
大家都知道用户登陆后,用户信息一般会选择保存在cookie里面,因为cookie是保存客户端, 并且cookie可以在客户端用浏览器自由更改,这样将会造成用户cookie存在伪造的危险,从而可能使伪造 ...
- Javascript中关于cookie的那些事儿
Javascript-cookie 什么是cookie? 指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).简单点来说就是:浏览器缓存. cookie由什 ...
- Cookie写不进去问题深入调查 https Secure Cookie
Cookie写不进去问题深入调查 https Secure Cookie 什么情形下,Cookie 会写不进去?https Secure Cookie像是语法错误那种显而易见的就不用说了,除此之外你可 ...
- session的安全性
提到session,大家肯定会联想到登录,登录成功后记录登录状态,同时标记当前登录用户是谁.功能大体上就是这个样子,但是今天要讲的不是功能,而是实现.通过探讨session的实现方式来发掘一些可能你之 ...
- session的基本原理及安全性
1.session原理 提到session,大家肯定会联想到登录,登录成功后记录登录状态,同时标记当前登录用户是谁.功能大体上就是这个样子,但是今天要讲的不是功能,而是实现.通过探讨session的实 ...
- 《selenium2 python 自动化测试实战》(14)——下载文件
说下载文件之前,我再和大家说一下用cookie登录的事,既然我们用cookie登录,那么传过去的cookie肯定是要和对应的网站完全一致的,注意,是包括大小写哦,本来我也是不知道,我用这个方法登录自己 ...
- Spring cloud微服务安全实战-3-11API安全机制之登录
流控.认证.审计.授权以上都做了初步的简单的实现. 之前写的代码,base64加密了用户名和密码. 缺点1:每次请求都要带用户名密码 增加了泄露的风险. 每次传上来用户名和密码都要check验证.ch ...
- 关于Cookie安全性设置的那些事
一.标题:关于Cookie安全性设置的那些事 副标:httponly属性和secure属性解析 二.引言 经常有看到XSS跨站脚本攻击窃取cookie案例,修复方案是有httponly.今天写出来倒腾 ...
- cookie、session和token那些事
cookie 和 session 众所周知,HTTP 是一个无状态协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据,如何能把一个用户的状态数据关联起来呢? 比如在淘宝的某个 ...
随机推荐
- Vue.js 源码学习笔记 -- 分析前准备1 -- vue三大利器
主体 实例方法归类: 先看个作者推荐, 清晰易懂的 23232 简易编译器 重点: 最简单的订阅者模式 // Observer class Observer { constructor (d ...
- 高并发中nginx较优的配置
一.这里的优化主要是指对nginx的配置优化,一般来说nginx配置文件中对优化比较有作用的主要有以下几项: 1.nginx进程数,建议按照cpu数目来指定,一般跟cpu核数相同或为它的倍数. wor ...
- 20155229 2016-2017-2 《Java程序设计》第六周学习总结
20155229 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 第十章 Java中,输入串流代表对象为java.io.InputStream,输出串流代表对 ...
- HDU 1263:水果(map)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 #include <stdio.h> #include <string.h&g ...
- Tomcat:Several ports are already in use问题
Several ports (8005, 8080, 8009) required by Tomcat v6.0 Server at localhost are already in use. The ...
- vsto excel 任务窗体操作
1. 开发环境visual studio 2010 2. office 2007 代码: 1.任务窗体 代码: partial class ActionsPaneControl1 : UserCont ...
- poj 2449 Remmarguts' Date(K短路,A*算法)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013081425/article/details/26729375 http://poj.org/ ...
- Tensoflw.js - 01 - 安装与入门(中文注释)
Tensoflw.js - 01 - 安装与入门(中文注释) 参考 W3Cschool 文档:https://www.w3cschool.cn/tensorflowjs/ 本文主要翻译一些英文注释,添 ...
- 二叉搜索树的第k大的节点
题目 给定一颗二叉搜索树,请找出其中的第k大的结点. 思路 如果中序遍历一棵二叉搜索树,遍历序列的数值则是递增排序,因此只需中序遍历一个二叉搜索树即可. #include <iostream&g ...
- Mac 下 java环境 maven环境配置
java环境配置 下载jdk,按照提示安装 我下的是1.8.0版本,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...