会话控制:cookie和session基础学习笔记
在多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(session)
我们可以简单理解为浏览器的开关.
其实对cookie和session也是主要为curd操作
cookie
cookie 之前以字符串的形式保存在客户端 *.txt的格式。google等浏览器现在已经改为二进制存储,相对安全些,HTTP协议是无状态协议,cookie是服务器留在用户计算中的小文件,用来识别用户。
- 创建cookie
setcookie() 函数用于设置cookie。
setcookie(name,value,expire,path,domain,secure);
参数 描述
name 必需。规定 cookie 的名称。
value 必需。规定 cookie 的值。
expire 可选。规定 cookie 的有效期。
path 可选。规定 cookie 的服务器路径。
domain 可选。规定 cookie 的域名。
secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
我们常用的是前三个参数 而且至少有这三个参数,如果没有第三个参数,则不能保存cookie
直观的 我们通过在服务器端设置cookie,通过http协议获取,则在响应头 我们能看到有这样一个参数
set-cookies:*****
cookie保存的数值类型:cookie只能保存字符串,而session保存的数据类型较多 比如对象和数组。
cookie 的数据以键值对的方式 存储在文件中 ,保存中文数据的话 是乱码 可以通过urlcode来转化。
cookie 可以有多个键值对,还可以给他们指定不同的有效期。浏览器可以正确的区分他们的有效期。
- 取cookie
用全局数组 $_COOKIE 。
客户端存在cookie 且cookie在有效期内 则可以获取。
机制:浏览器可携带,通过抓取,我们能看到 服务器在客户端设置cookie,下次浏览器携带cookie信息访问服务器。然后服务器可以通过$_COOKIE 来获取。
- 更新cookie
用setcookie()函数重新设置即可。
- 删除cookie
指定删除某一个cookie,只需要用setcookie(),设置时间为当前时间减去一个时间即可。
删除所有cookie,遍历$_COOKIE,遍历设置时间为过期时间。同时若cookie删除完,则相应的文本文件也会被删除掉。
2.session
在实际的网站开发中,session有很多应用场景,比如购物车,用户登录状态保持 等等,session相对cookie来说 安全/减少带宽消耗。
我们需要若想好好利用session,则需要好好了解session保持的数据结构。
特别需要注意的是,不管对session做什么操作,每次都要session_start(); 初始化
- 写入session
session_start();
$_SESSION[$key] = $value;
- 获取session
session_start();
$_SESSION 全部
$_SESSION[$key] 获取某一个
- 更新session
类似写入 重新定义一个
session_start();
$_SESSION[$key] = $value;
- 删除session
session_start();
删除某一个session
unset($_SESSION[$key]);
删除所有session
session_destroy();//注意:删除一个会话对应的session 不是所有用户 是某一个用户
同时会把当前的session文件删除掉。
正常情况下,通过session和cookie的原理 可以看出session是需要结合cookie来用的,但是存在cookie被禁用的情况。
其实cookie保存的session信息就是session_id();
这样 如果用户禁用cookie,那我们可以自己去想办法存储session_id()就好了。
判断是否禁用cookie 然后我们自己去给自己存储session_id();
禁用cookie 用session
方案一
1.自己获取session_id()
方案二
2.用常量
SID
方案三
3.启用 session user_trans_sid 指定是否启用透明SID支持 默认不支持0
效果 是在每个 超链接后面带SID
本人记录权作笔记参考,快速回忆,实际应用中有一些复杂的场景,比如 session的跨服务器共享。涉及到知识较多,但是还是要在充分理解session 原理的基础上 去解决相关的问题。
关于session的详细原理,及session共享的方案 找了几篇参考下,和目前我所遇到的业务场景不同 ,但是还是有很大的参考价值。
后续我会在工作中慢慢补充完善。
session原理总结:http://www.cnblogs.com/wangtao_20/archive/2011/02/16/1955659.html
跨服务器session共享的四种方法:http://blog.sina.com.cn/s/blog_5f3d71430100jv7q.html
session多服务器共享的方案梳理:http://www.cnblogs.com/wangtao_20/p/3395518.html
PHP 实现多服务器共享 SESSION 数据:http://www.cnblogs.com/CHEUNGKAMING/p/4092867.html
会话控制:cookie和session基础学习笔记的更多相关文章
- http协议。会话控制cookie、session
http协议是无状态的协议.每次访问页面的http协议都是独立的,正是因为http协议是无状态的,所以导致访问一个页面后再去访问另一个页面的时候,一些数据会消失,比如:用户的登录信息就会消失.那么怎么 ...
- 会话控制:Cookie和session
HTTP(超文本传输协议)定义了通过万维网(WWW)传输文本.图形.视频和所有其他数据所有的规则.HTTP是一种无状态的协议,说明每次请求的处理都与之前或之后的请求无关.虽然这种简化实现对于HTTP的 ...
- 会话控制cookie和session
Cookie Cookie简介 HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我们进行网购时, ...
- 会话控制——Cookie和Session
Cookie简介 l HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我们进行网购时,买了一条 ...
- C#RabbitMQ基础学习笔记
RabbitMQ基础学习笔记(C#代码示例) 一.定义: MQ是MessageQueue,消息队列的简称(是流行的开源消息队列系统,利用erlang语言开发).MQ是一种应用程序对应用程序的通信方法. ...
- Oracle基础学习笔记
Oracle基础学习笔记 最近找到一份实习工作,有点头疼的是,有阶段性考核,这...,实际想想看,大学期间只学过数据库原理,并没有针对某一数据库管理系统而系统的学习,这正好是一个机会,于是乎用了三天时 ...
- 基础学习笔记之opencv(6):实现将图片生成视频
基础学习笔记之opencv(6):实现将图片生成视频 在做实验的过程中.难免会读视频中的图片用来处理,相反将处理好的图片又整理输出为一个视频文件也是非经常常使用的. 以下就来讲讲基于opencv的C+ ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- 【C#编程基础学习笔记】4---Convert类型转换
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...
随机推荐
- ME21N/ME22N/ME23N屏幕增强BADI ME_GUI_PO_CUST
最近想更深入学习下classic BADI, 以前没玩过BADI屏幕增强, 所以决定玩一下. 这次的屏幕增强主要用到两个BADI: ME_GUI_PO_CUST和ME_PROCESS_PO_CUST ...
- 【转】ubuntu修改IP地址和网关的方法
一.使用命令设置Ubuntu IP地址 1.修改配置文件blacklist.conf禁用IPV6 sudo vi /etc/modprobe.d/blacklist.conf 表示用vi编辑器(也可以 ...
- Spring任务调度
任务调度是大多数应用系统的常见需求之一,拿论坛来说:每个半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行对锁定过期的用户进行解锁.以上都是以时间为关注点的调度,事实上 ...
- 关于Git远程版本库
Git作为分布式版本库控制系统,每个人都是本地版本库的主人,可以在本地的版本库中随心所欲的创建分支和里程碑. 当需要多人协作时,问题就出现了: 1.如何避免因为用户把所有的本地分支都推送到了共享版本库 ...
- GitHub这么火,程序员你不学学吗? 超简单入门教程 干货
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...
- war包编译和打包发布
用IDE写一个基本的webApp 要学习java web技术,除了javaSE基本功之外,基础知识还有servlet技术.我们如果只用IDE的话,会把很多问题屏蔽掉,很多细节就想不清楚了.最好的方式, ...
- Microsoft SQL Server 获得本地帮助方法
微软的自带的帮助文档不管是对于开发人员还是DBA都是相当的重要.一般在有网络的状况下可以直接访问 http://msdn.microsoft.com/query/dev10.query?appId=D ...
- C# 编写短信发送Window服务
我们做项目过程中,一般都会有发送短信的需求.最常见的就是户注册或者登录时发送短信验证码.不同类型的短信发送,我们都可以放到到一张短信表中,然后通过一个定时的作业去执行短信发送.而定时作业的执行,我们就 ...
- Sql Server通过BCP数据导出Excel
1.1. bcp的主要参数介绍 bcp共有四个动作可以选择. (1) 导入. 这个动作使用in命令完成,后面跟需要导入的文件名. (2) 导出. 这个动作使用out命令完成,后面跟需要导出的文件名. ...
- android开发 锁屏 真正的锁屏,是go锁屏那种。
想做个锁屏界面很久了,最近一周,历经千辛万苦,越过种种挫折,终于完美实现了这一要求,在此将锁屏思路分享出来. 注意:这不是什么一键锁屏,是类似“go锁屏”那样的锁屏界面. 准备:本程序共需要 两个ac ...