php 缓存 $_SESSION 与 $_COOKIE
区别
$_SESSION
特点:存储在服务器上,周期短(浏览器关闭及清除) 相对于cookie更安全
使用: 开始 session_start();
赋值 $_SESSION["temp"] = "value";
示例
session_start();
if(isset($_SESSION["tempOrder"])){ $diyOrderType = $_SESSION["tempOrder"];}
else{$diyOrderType = 'modified';}
if(isset($_GET["orderVal"])){$_SESSION["tempOrder"]=$_GET["orderVal"];}
示例二
session_start();
$_SESSION['tempdiyorder'] = $diyOrderType; /** 吧接收到的数据放入缓存 */
$tempDiyOrderType = $_SESSION['tempdiyorder'];
备注:每一个用户访问时都有自己的一个会话id,连接开始后会判断是否是同一个id
若设置了 session_id("08nr1fav9jqs2pdi5qlpsmd247");
那就是固定id 所有用户(即更换浏览器更换ip)都使用这个id,访问到的数据也是相同的,不重新创建
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。
相关操作代码
Session的配置与应用
session_start(); //初始化session.需在文件头部
$_SESSION[name]=value; //配置Seeeion
echo $_SESSION[name]; //使用session
isset($_SESSION[name]); // 判断
unset($_SESSION[name]); //删除
session_destroy(); //销毁所有session
设置session_name()
session.name = PHPSESSID
//默认值
设置id
示例:session_id("12345678901s2pdi5qlpsmd520");
那就是固定了
如何传递Session ID
方法一:通过 Cookie
来传递 Session ID
示例:setcookie(session_name(), session_id(), 0, '/')
其他方式session_id($_GET['sessid']);
方法二:通过 URL
来传递 Session ID
//开启 sessionsession_start();
// 在 URL 后面附加参数,变量名为session_name()
获取的名称,值为session_id()
获取'网址?'.session_name().'='.session_id()
echo '演示';
设置 Session
session_get_cookie_params();
销毁变量
session_start(); //开启Session并初始化
session_unset(); //清除
session_destroy(); // 关闭session
$_SESSION = array(); // 删除所有Session的变量,也可以用`unset($_SESSION[XXX])`逐个删除
虚拟空间(虚拟主机)设置 超时过期
ini_set('session.gc_maxlifetime', "3600"); // 秒
ini_set("session.cookie_lifetime","3600"); // 秒
vps主机 可以 编辑php.ini
配置文件
设置session.gc_maxlifetime
和session.cookie_lifetime
节点属性值
示例 保存30天 ini_set("session.cookie_lifetime","25923000");
/ 自定义session保存时间 /
php.ini
配置文件 路径 可以通过 <?php echo phpinfo(); ?>
查看
#修改session配置
session.use_cookies = 1 // 是否使用cookies
session.cache_expire = 25923000 //设置缓存中的会话到期时间
session.gc_maxlifetime = 25923000 // 最大保存时间 ,默认1440秒(24分钟)
session.cookie_lifetime = 25923000 //cookie的保存时间,为0表示浏览器关闭直接清空
其他一些 不常用的
session.cookie_path = / ; // cookie的有效路径
session.cookie_domain = ; // cookie的有效域
session.name = PHPSESSID; // 用在cookie里的session的名字
session.save_handler = files ; // 用于保存/取回数据的控制方式
session.save_path = /tmp ; // 在 save_handler 设为文件时传给控制器的参数, 这是数据文件将保存的路径.
session.gc_probability/session.gc_divisor; // 启动垃圾回收机制的概率(建议值为1/1000——5000)
session.auto_start = 1 ;
// 值设置为1 ,则PHP中的session模块会在每个请求时自动启动一个会话,因此您不必在脚本中使用session_start函数。
session.save_path
不通过php.ini
配置文件直接在php代码里 设置
/* 设置缓存限制为 “private” */
session_cache_limiter('private');
$cache_limiter = session_cache_limiter();
/* 设置缓存过期时间为 30 分钟 */
session_cache_expire(30);
$cache_expire = session_cache_expire();
/* 开始会话 */
session_start();
$_COOKIE
特点:缓存,,保存在本地。时效较长 但传输时容易被获取到
示例
if(isset($_COOKIE["diyOrderType"])){ $diyOrderType = $_COOKIE["diyOrderType"];}
else{$diyOrderType = 'modified';}
if(isset($_GET["orderVal"])){setcookie("diyOrderType",$_GET["orderVal"],time()+3600*24*30);}
PHP中cookies无法跨目录(同域名下)调用访问问题
原代码
setcookie("cachekey",$Array_keys,time()+3600*24*30);
修改后的代码
setcookie("cachekey",$Array_keys,time()+3600*24*30,"/");
在最后增加路径参数/
就可以了
调用$_COOKIE["cachekey"]
echo $_COOKIE["cachekey"];
echo $HTTP_COOKIE_VARS["cachekey"];
语法setcookie(name, value, expire, path, domain);
js删除cookiedocument.cookie = "test=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/;";
js获取cookie
console.log(document.cookie);
和
var sessid=document.cookie.split(";")[0].split("=")[1];console.log(sessid);
暂无评论