session和cookie

session和cookie都是会话控制思想的体现,即:允许服务器跟踪同一客户端的连续请求。


cookie是什么?

将使用者的资料记录存放在客户端的技术

cookie运行原理?

首先:服务器 通过http的响应头 把用户的信息 以键值对的形式发送到客户端

然后:当客户端再次访问同一台服务器其他的脚本时,会自动携带cookie中的信息通过http请求头传送给服务器

最后:服务器接收到信息,重新对登陆者身份进行验证

cookie包含了什么?

cookie包括名字,值,域,路径,过期时间。

路径和域构成cookie的作用范围。cookie如果不设置过期时间,则这个cookie在浏览器进程 存在时有效,关闭时销毁。如果设置了过期时间,则cookie存储在本地硬盘上,在各浏览器进程间可以共享。

怎么设置cookie?

使用php内建的setcookie()函数

setcookie($name,$value,$path,$domain,$source)一共六个参数,一般常用前三个 名字,值和生存时间。最后一个source指的是是否仅在安全的https连接时传送,默认false

例:setcookie(‘name’,‘tian’,time()+60*60*24*7,'/test','.baidu.com',‘1’)设置cookie名为name,值为tian,这个cookie七天后失效,只在服务器test目录下生效,只在baidu.com的所有子域中生效,仅在安全的连接中才能被设置

注意:setcookie的第二个参数只能是字符串或者数值

怎么删除cookie?

第一种方法:setcookie('name')  省略了别的参数

第二种方法:setcookie(‘name’,'',time()-1)  把生存时间设为过期

cookie放哪了?

如果用户是windows系统,那么放在了C:\Docunments and Settings\用户名\Cookies

cookie的形态?

cookie可以是单一的,通过setcookie('name','tian') 现在cookie的标识符为name

cookie也可以为数组,通过setcookie('user[username]','tian') 现在cookie的标识符为user[username],这是一个数组的下标


seesion是什么?

将使用者的资料记录存放在服务器端的技术

session是保存使用者的资料在服务器系统下,而cookie是将数据放在客户端的计算机之中对于session来说,客户端仅仅保存服务器为用户创建的一个session标识符称为sessionID而在服务器端保存session变量的值。sessionID是一个32位的字符串,一般情况下sessionID保存在客户端的cookie里。如果禁用cookie,sessionID可以通过隐藏表单传递,也可以通过URL重写,就是把后缀到url传递

session运行原理?

首先:第一次访问网站,session_start()函数创建一个sessionID,通过HTTP响应头发送到客户端并保存在cookie中,同时也在服务器端创建一个以sessionID命名的文件,保存用户的会话信息

然后:用户再次访问网站时,先检查HTTP请求头中是否有一个sessionID,没有就创建同上一步,有的话就在服务器硬盘中搜索与seesionID同名的文件,将会话信息读出。

session的使用

在php中必须先调用session_start()函数,开启session。函数没有参数,如果是基于cookie的session,使用该函数之前,不能有任何内容的输出。

启动完成后,接下来就是注册和读取session变量,都要用过全局数组$_SESSION数组完成session_start();然后注册session变量$_SESSION['username'] = "tian";

注意:在$_SESSION['username'] = "tian"赋值的同时也会在sessionID文件中追加信息;当用户再次请求本页或其他页面,或者 echo $_SESSION['username'] ,是先从这个用户的seesionID文件中获取全部的信息数据进入到$_SESSION数组中,感觉起来好像是直接从数组中获取得值。

注销变量与销毁Session

1.session_destroy()结束当前的会话,清空会话中所有资源,但不会释放session相关变量

2.  unset($_SESSION['username']);             //删除session中注册的用户名变量 unset($_SESSION['password']);                     //删除删除session中注册的密码变量或者直接$_SESSION = array()    将这个全局数组赋为空

3.setcookie(session_name(),'',time()-3600,'/');    //删除客户端的cookie,这个第一个参数session_name是php.ini里设置的sessionID的cookie标识符

Session的自动回收机制

虽然用户可以点击“退出”按钮退出登录,但如果直接关闭浏览器或者断电的情况下载服务器端保存的Session文件是不会被删除的,虽然下次登录会重新分配一个sessionID,但是之前的Session文件已经成为了垃圾文件。

在php.ini中使用session.gc_maxlifetime选项指定一个时间,例如1440也就是24分钟后没有更新修改时间的session文件就会被‘垃圾回收程序’收回。

垃圾回收程序是在session_start()函数调用时启动的,如果用户很多,可能一秒内session_start()函数会调用N次,每次都要垃圾回收的话是不合理的。

可以在php.ini中修改session.gc_probability/session.gc_divisor公式计算概率例如1/100,前者设为1,后者设为100。

自定义Session处理方式

session默认在web服务器中存储会话信息,但是如果用户量特别大的情况下,文件I/0开销会很大,严重影响效率,最主要的是不能跨服务器, 对于大系统一般都会使用多台服务器进行并发处理,这样就不能达到跟踪用户的目的。 ——需要我们改变session存储方式:

1.使用NFS或者SAMBA共享技术保存在其他服务器中。 2.使用数据库保存session信息。    3.(最优)使用memcache缓存技术存储。

不论使用哪种方式原理都是一样的,使用php中的session_set_save_handler()函数处理:该函数六个必选参数,分别代表了session声明周期的六个过程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容