session 和 coonkie 的区别于联系

对于PHP的初学者而言,经常因为session和cookie而头大,因此。


<?php 
/**
cookie
session
总结

session的工作原理:接受cookie携带的session ID ,验证合法性
如果本地浏览器禁用了cookie,session也是可以用的,但是不能使用本地浏览器传值,
	可以通过URL地址重写 sessionID
	URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态
其实说白了session就是用来保存会话的cookie。

详细信息可以参看https://www.zhihu.com/question/19786827
**/

1.用户进行 登录 退出 的时候需要用到

2.cookie就是吃饭用的牌子  
		浏览器给服务器传数据时, 服务器 给浏览器一个 cookie,数据就保存在cookie里,浏览器再次访问的时候,传给服务器cookie
  session就是超市用的柜子
  		浏览器给服务器传数据时, 服务器 给浏览器一个 很难识别cookies ,并且把数据保存在服务器中, 浏览器再次访问的时候,把复杂的cookie传给服务器,服务器调取数据


3.cookie 的设置,改变,销毁 都是通过 setcookie() 这个函数来实现的
  cookie 的读取,是通过 $_COOKIE 来读取的

4.setcookie()的参数 
	setcookie(name, value, time(), path);
		/*
		setcookie()可以由2个参数,3个参数,4个参数,5各参数
		setcookie($name, $value, $expire=0, $path, $domain, $secure = false, $httponly=false)
		*/

		//2个参数设置的cookie,浏览器关闭,cookies就会失效
		setcookie('age', 29);

		//3个参数设置cookies,第3个参数就是cookie的保存时间,以时间戳为单位,可长可短,且不受浏览器开关限制
		setcookie('school', 'MBA', time()+3600); //15秒后消失,关闭浏览器,MBA还在,但是age不存在了
		echo "cookies设置成功";

		//4个参数设置cookie,cookie的读取范围,默认在子目录下都能读到,
			
			//如果想要让cookie整栈有效,1.可以在根目录下设置setcookie
			//							2.也可以使用第四个参数来指定 cookie 生效路径

		setcookie('golbal', 'any where!', time()+3600, '/'); // '/'表示的是根目录的意思

		//5个参数, cookie是不能跨域名的(不同网站之间不能通用。。保证安全性)
			//比如sohu.com的cookie,不能发到sina.com使用,
			//但是可以在一个域的子域名下保存,需要用到第5个参数
			//比如: setcookie('name', 'value', time()+200, '/', 'sina.com.cn')
					//这个 cookie 可以在jushi.sina.com.cn 下使用
					// 			也可以在 book.sina.com.cn 下使用 ...等等
			//一般只用前四个,第五个用于大网站,但是大网站一般有专门的ssn一站式处理方案

		/**
			名称: name
			内容: 29
			主机: localhost
			路径: /shangcheng/day16/
			发送条件: 任意类型的连接
			过期时间: 在会话结束时

			1.名字,2.值, 3.事件,4.路径
		**/

		//cookie的失效可以改变时间,使用负数或者0.
		setcookie('school', 'MBA', 0);

5.cookie 是服务器给浏览器牌子,下次访问时,浏览器拿着牌子访问
	设置cookie, 使用setcooki()
	使用cookie, 使用$_COOKIE[] 超级全局变量
	那么问题来了,如果 cookie 被篡改了,后果很严重
		所以,cookie往往记住用户名,浏览历史等等安全性不高的地方
		如果要防范的话,可以用session技术,也可以用一些加密机巧

6.session
/**
1.浏览器 发送数据给 服务端,
	服务端 储存数据 并且产生一个 凭证 返回给 浏览器

2.浏览器 再次访问时,给服务器凭证
	服务器 利用凭证取出数据,传给浏览器
**/

7.
	cookies 篡改是在浏览器上修改,危险
	session 篡改是在服务器中修改,属于把系统(服务器)入侵了,
		凭证比较乱是为了各个客户之间可以猜出来,防止偷取客户端凭证(PHPSESSID) //也就是(sessionid) 
		当我们的sessid被偷取的时候,赶紧退出后重新登录

8.session的详细用法
/**
session  的创建、修改、销毁
	1.都必须有  session_start();
	2.session_start() 之后,$_SESSION 就可以添加、删除、修改了,可以当做普通数组修改
		cookie的操作只能通过 setcookie() 来操作
**/
/*
	销毁 $_SESSION
		1.把箱子清空
		2.把箱子毁掉
	
*/
1.单独销毁某一个单元  
	unset($_SESSION['user'])
2.把箱子清空(文件变空白了)
	$_SESSION = array();
3.利用函数把箱子清空,效果同 2
	session_unset();
4.把箱子毁掉
	session_destroy();


// $_SESSION 的生命周期
session 两个方面发挥作用:
	1. 客户端的 cookie 
	2. 服务器端的 session

让session 失效的话,两个方面分析
	1.在 php.ini 中,可以控制cookies的生命周期,以秒为单位
		session.cookies_lifetime = 15
		如果用户篡改声明周期,为1年,我们是无法判断的

		如果严格控制session有效期半个小时,可以这么做
		利用时间戳 $_SESSION['time'] = 登录的时间戳,然后检验session的开始时间

		为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。

		Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
/**
	session的有效路径,取决于cookie,只要cookie有效,那么session就能读到
		在php.ini下,指定了凡是关于sessionid的cookie的有效路径是根路径
			/*
			; The path for which the cookie is valid.
			; http://php.net/session.cookie-path
			session.cookie_path = /
*/

/**
	cookie 中只能存放 string  数字 之类类型的标量
	session 可以存放数组,对象之类的,除了不能存储 资源类型 之外的其他7种都可以
		如果我们把对象写入session中,那么读取对象的页面中也应该有这个对象的类的声明才可以,
			否则,从session中分析出一个对象,但是却没有和他相对应的类,就会提示:
			__PHP__Incomplete_Class Object 提示
		
		class Dog{
			public $leg = 4;
		}  			//读取的时候,只需要把类拿过去就OK了

		$dog = new Dog();
		$_SESSION['dog'] = $dog; 
**/		

					cookie						session
储存地点			客户端						服务器
安全性				  低							高
储存类型 	不能存数组、资源、对象 				除了资源
创建方式 		setcookie() 				session_start()开启,然后当做数组用
读取 				$_COOKIE 					$_SESSION
销毁 	   setcookie('k','y',time()-1)		$_SESSION 赋值或者函数(4种方式)

在使用cookie之前,不能有任何信息出现,空白也不可以,报错之后如果还没有,检查bom信息


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值