会话之Session

1. 什么是Session?

    Session其实是保存在服务器端的,保存的方式可以是文件,或数据库类型(默认是保存的是文件)

    Session的运行依赖session_id,而session_id是存在cookie中的以,如果当浏览器禁用了cookie以后

    就需要通过其他方式来实现(可以通过URL 传递session_id)

    session.save_handler = files

    可以通过改变存储方式默认是文件存储(files)

2. Session的使用

    当使用session的时候必须要开启session

    session_star()      //开启session

        当开启session的时候,服务器端会生成一个session_id保留到客户端并且会生成一个session文件保存在服务器

         在php.ini文件中搜索  session.save_path 可以看session文件的保存路径    

            

    session_name()  存储目前session名称

    session_id()   会话id

    session的创建

    session是以数组方式存储的所以可以用数组方式设置

    $_SESSION[name] = value ; //设置session

    echo $_SESSION[name];  //使用SESSION 输出SESSION

    isset($_SESSION[name]); //是否设置SESSION

    unset($_SESSION[name]); //销毁session变量而不是删除会话(可以勉强理解为session数组里面的变量)

    删除session

    1.session_unset(); 

        会释放当前会话注册的所有会话变量,这会删除所有的$_SESSION数据,刷新后有Cookie穿过来,但里面没有数据

    2.$_SESSION = array();    效果同上

    3.session_destroy();    删除session文件和session_id

    4.setcookie(session_name(),session_id(),time()-3600,'/');    利用设置cookie过期时间来清除留在客户端的session

        ‘/ ’ 路径一定要设置 (在php.ini文件中搜索  session.save_path 可以看session文件的保存路径)

        session_name   //名

        session_id // id 会话id

    注:彻底删除session需要同时设置1、3、4步 (1、3会删除服务器端session文件)

        实例:

<?php 
	session_start();
	//设置SESSION
	$_SESSION['name'] = 'Hello'; 
	$_SESSION['age'] = 20;
	//读取
	echo $_SESSION['name']; // Hello
	//修改
	$_SESSION['name'] = 'new Hello';
  ?>
 

    删除会话

    

<?php 
	//做所有操作时都应开启session
	session_start();
	session_unset();//删除会话变量,不会删除session_id和session文件
	session_destroy(); //删除会话id和文件 不会删除内存中的会话
	/*
		要彻底删除需要配合使用
	*/
  ?>

上面提到session默认用文件缓存,当用户把cookie禁用后将会生成多个session_id 产生文件

    解决方案: 通过url进行传session_id

    当我们使用自定义的session_id 时应放到session_star() 之前

    uniqid() 生成一个唯一的id

    session垃圾回收机制

    session 的垃圾回收是概率性的, 根据php.ini配置的 (分子/分母) 如果是0,此时只能手动删除

            session.gc_probability = 1  //计算分子

            session.gc_divisor = 1000  //计算分母

            session.gc_maxlifetime = 1440 //过期时间默认是24分钟

            

            session.save_path = 路径    //session保存的目录

猜你喜欢

转载自blog.csdn.net/strugglin/article/details/80489512