第118讲 session② 获取session 更新session 删除session session细节和原理深入

版权声明:本文为博主原创文章,未经博主允许不得转载,如需强制转载,请注明出处且需对文章进行评论声明转载。 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成功";

image

一个浏览器对应一个session 本机 假如开了三个浏览器进程,那么三个浏览器进程对应这三个session文件

测试:

  • 本机 一个google浏览器 一个 ie 浏览器 一个 360浏览器(可以一个浏览器开三个进程 我电脑刚好有三个浏览器直接开启测试了)
    全都运行都可以看到session
    依次开启浏览器打开对应的url依次生成对应浏览器进程的session文件

相应的清除session就得用对应的浏览器进程清除
不过貌似session有默认存储时间限制到时间自动清理(没试过)

如下图:
image

小结:

  • 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所有配置信息位置

image
所有配置更新后都要重新启动Apache。

image

session基本使用图解
image

image

image

相同内容不同文件 同一浏览器访问的话。会生成一个统一的
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号相同啊。

猜你喜欢

转载自blog.csdn.net/u014449096/article/details/84293387
今日推荐