版权声明:本文为博主原创文章,未经博主允许不得转载,如需强制转载,请注明出处且需对文章进行评论声明转载。 https://blog.csdn.net/u014449096/article/details/84293387
注意所有取session之前都要判断是否为null
<?php
header("content-type:text/html;charset=utf-8");
echo "<br/>***如何获取session数据***<br/>";
//初始化session
session_start();
//获取session
//1、把所有的session获取出来
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
//2、通过键指定获取某个值
echo "存储的名字是".$_SESSION['name'];
echo "<br/>数组的数据是:";
$arr1 = $_SESSION['arr1'];
for ($i = 0; $i < count($arr1); $i++) {
echo "<br/>-----".$arr1[$i];
}
echo "<br/>";
//取出对象
echo "<br/>取出对象";
$dog = $_SESSION['dog'];
echo "狗:".$dog->dogname;
如上方式取对象 对象取出位置报错
取出对象
Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Dog" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in D:\phpStudy\WWW\SessionTest\session2.php on line 23
狗:
<?php
require_once 'Pet.php';
header("content-type:text/html;charset=utf-8");
echo "<br/>***如何获取session数据***<br/>";
//初始化session
session_start();
//获取session
//1、把所有的session获取出来
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
//2、通过键指定获取某个值
echo "存储的名字是".$_SESSION['name'];
echo "<br/>数组的数据是:";
$arr1 = $_SESSION['arr1'];
for ($i = 0; $i < count($arr1); $i++) {
echo "<br/>-----".$arr1[$i];
}
echo "<br/>";
//取出对象
//取出对象前先重新声明一下对象就不会报下边那个错了 可以把类重新写一遍
/**
* 取出对象
Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Dog" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in D:\phpStudy\WWW\SessionTest\session2.php on line 23
狗:
* Enter description here ...
* @author Administrator
*
*/
class Dog{
public $dogname;
public $sex;
}
echo "<br/>取出对象";
$dog = $_SESSION['dog'];
echo "狗:".$dog->dogname;
echo "<br/>取出pet对象<br/>";
$pet = $_SESSION['pet'];
echo "取出的pet对象".$pet->petName;
如上取对象的时候引入声明也是可以的 如上边的pet对象
更新session数据:
<?php
header("content-type:text/html;charset=utf-8");
echo "<br/>***演示更新session数据***<br/>";
session_start();//初始化session;
$_SESSION['name']="12345678dd";//如此这般按照对应的键重新保存一下就直接刷新了
echo "刷新成功!";
删除session数据
<?php
header("content-type:text/html;charset=utf-8");
echo "<br/>***演示删除session数据***<br/>";
session_start();//初始化session
//1、删除某一个键值对key<==>val
unset($_SESSION['name']);
//2、删除所有键值对
session_destroy();//删除当前浏览器对应的session文件----不会删除别人浏览这个界面的session(只删除自己开启浏览器的session)
echo "删除session成功";
一个浏览器对应一个session 本机 假如开了三个浏览器进程,那么三个浏览器进程对应这三个session文件
测试:
- 本机 一个google浏览器 一个 ie 浏览器 一个 360浏览器(可以一个浏览器开三个进程 我电脑刚好有三个浏览器直接开启测试了)
全都运行都可以看到session
依次开启浏览器打开对应的url依次生成对应浏览器进程的session文件
相应的清除session就得用对应的浏览器进程清除
不过貌似session有默认存储时间限制到时间自动清理(没试过)
如下图:
小结:
- 1、如果需要使用session,必须要初始化
即session_start(); - 2、session文件中可以放入多个键值对,注意,键不能重复
- 3、如果我们要取出对象,则事先声明下就好 如上pet
session 的细节讨论
- ①session 文件默认存放时间是1400s,这个时间可以通过php.ini来修改 ,如下值是可以修改的
session.gc_maxlifetime = 1440
如上时间指的是在1440s内没有使用过session文件,如此该session文件才会被当做垃圾进行回收
- ②session文件的存放路径是可以修改的,一样在php.ini中
如下
;session.save_path = "/tmp"
session.save_path = "D:\phpStudy\tmp"
在php手册中php.ini所有配置信息位置
所有配置更新后都要重新启动Apache。
session基本使用图解
相同内容不同文件 同一浏览器访问的话。会生成一个统一的
Cookie:PHPSESSID=urskaqg254e51riu9tmv7f66g1
然后会看到
http://localhost//SessionTest/session1.php
http://localhost//SessionTest/sessionHttp.php
这俩 不同文件在同一个浏览器中
PHPSESSID=urskaqg254e51riu9tmv7f66g1 是一模一样的
http://localhost//SessionTest/session1.php
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:Keep-Alive
Content-Type:text/html;charset=utf-8
Date:Tue, 18 Jul 2017 03:21:45 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=5, max=100
Pragma:no-cache
Server:Apache/2.4.10 (Win32) OpenSSL/0.9.8zb mod_fcgid/2.3.9
Set-Cookie:PHPSESSID=urskaqg254e51riu9tmv7f66g1; path=/
Transfer-Encoding:chunked
X-Powered-By:PHP/5.4.33
http://localhost//SessionTest/sessionHttp.php
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Cookie:PHPSESSID=urskaqg254e51riu9tmv7f66g1
Host:localhost
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
所以基于此 不同文件相同内容 相同浏览器进程生成的session_id是一样的。这就好解释为什么浏览器能精准找到这个session文件是因为啥了。。id号相同啊。