PHP----会话(cookie & session)


本文主要记录自己学习会话的笔记,仅供参考,之后如果继续学习会继续补充~


cookie

**def:**PHP透明地支持http.cookie。cookie是一种在远程浏览器端存储数据并以此来跟踪和识别用户的机制。

**设置函数:**setcookie()或setrawsookie()
setcookie( k e y , key, key,value, e x p i r e , expire, expire,path, d o m a i n , domain, domain,secure,$httponly);
获取cookie: C O O K I E [ ′ u s e r n a m e ′ ] ∗ ∗ 删 除 c o o k i e : ∗ ∗ s e t c o o k i e ( _COOKIE['username'] **删除cookie:**setcookie( COOKIE[username]cookiesetcookie(key,$value,time()-3600);

如果浏览器不支持cookie,则可以使用表单传送数据。

session

def: 会话机制(session)在PHP中用于保持用户连续访问web应用时的相关数据,有助于创建高度定制化的程序、增加站点的吸引力。

**设置函数:**session_start();
比如:

<?php
session_start();
$_SESSION['username']='zhangsan';
>

默认session的存放路径为服务器端的tmp目录,如果需要修改,需要在php.ini中设置。
session存放文件名称为sess_32位编码后的随机字符串,比如:sess_4c83638b3b0dbf65583181c2f89168ec,内容如下:
username|s:8:zhangsan;
形式为:变量名|类型:长度:值;
用分号分隔每个变量,有些可以省略,比如长度和类型.

销毁:


//如果需要销毁session,可以单独销毁某个变量:
unset($_SESSION['username']);
//也可以直接销毁整个session文件:
session_destroy();

设置session的声明周期:

如果客户端没有禁用cookie,则cookie在启动session会话的时候,扮演的是存储session ID和session生存期的角色。
session ID就是session文件的扩展名,随机生存的,因此能保证唯一性和随机性,确保session的安全。
如果没有设置session的生存周期,则session id 存储在内存中,关闭浏览器后该ID自动注销,重新请求该页面后,重新注册一个sessionID。

<?php
session_start();
//session生存周期为1天
//session_name()即为php.ini中的session.name = PHPSESSID中的PHPSESSID
//
setcookie(session_name(),session_id(),time()+24*3600,'/');
//也可以用如下函数设置生存周期,但是IE6.0会有点问题,具体不清楚
session_set_cookie_params(24*3600);
>

具体见下面操作的截图:
在这里插入图片描述

注意:
如果客户端禁用cookie,则所有的session的生存周期就是浏览器进程了,只要关闭浏览器,再次请求页面又得重新注册session,此时可以通过URL或者隐藏表单来传递sessionID,PHP会自动将sessionID发送到url上,比如:
http://www.test.cn/index.php?PHPSESSID= bba5b2a240a77e5b44cfa01d49cf9669
我们可以通过$_GET来获取该值,从而实现sessionID页面间传递。
具体如下:


<?php
$lifeTime = 24*3600;
$sessionName = session_name();
//取得session ID
$sessionId = $_GET[$sessionName];
//设置session ID
session_id($sessionId);

//设置生存周期
session_set_cookie_params($lifeTime);
session_start();
?>

对于虚拟机主机来说,如果所有用户的session都保存在系统临时文件加里,将给维护造成困难,而且降低了安全性。
我们可以手动设置session文件的保存路径,session_save_path()就提供了这样一个功能。我们可以将session存放目录指向一个不能通过web方式访问的文件夹,当然,该文件夹必须具备可读写属性。

<?php
$path = './session_save_dir/';
$lifeTime = 24*3600;
//一定要在session_start()之前使用
session_save_path($path);
session_set_cookie_params($lifeTime);
session_start();
?>

结论:
无论cookie还是session都能进行会话控制
cookie保存在客户端,安全性不高,当然我们可以通过加密和字符串连接等方式加强安全性。
session保存在服务器中,但同时也依赖于cookie,虽然可以通过其他方式访问,但推荐使用cookie方式,安全性更高。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值