你好,欢迎访问我的博客!登录
当前位置:首页 - 教程 - 正文 君子好学,自强不息!

php会话机制之session的基本用法教程

2018-06-13 08:32:37教程admin36°c
A+ A-

php session

Session译为“会话”,其本义是指有始有终的一系列动作/消息,如打电话时从拿起电话拨号到挂断电话这一系列过程可以称为一个Session。  Session是服务器端技术,利用这个技术,服务器可以为每个用户的浏览器创建一个为其独享的session文件,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其他web资源时,其他web资源再从用户各自的session中取出数据为用户服务。 

保存session信息

index1.php

<?php

session_start(); // 初始化session

$_SESSION['name'] = "zhangsan"; //保存某个session信息

index2.php

<?php

session_start();

echo $_SESSION['name'];

  先在网页中运行index1.php,再运行index2.php页面输出:

给Session设置时间


Session失效时间设置主要有两种方式:

1、客户端没有禁止Cookie

(1)使用session_set_cookie_params()设置Session的失效时间,此函数时Session结合Cookie设置失效时间。以下示例让Session在1分钟后失效:

<?php$time=1*60;
session_set_cookie_params($time);
session_start();$_SESSION[username]='mr';?>123456

session_set_cookie_params()必须在session_start之前调用。 
不推荐使用此函数,此函数在一些浏览器上会出现问题,所有一般手动设置失效时间。

(2)使用setcookie()函数对Session设置失效时间,如让Session在1分钟后失效:

<?phpsession_start();$time=1*60;
setcookie(session_name(),session_id(),time()+$time,"/");$_SESSION['user']="mr";?>123456

在上面程序的setcookie()函数中,session_name是Session的名称,session_id是判断客户端用户的标示,因为session_id是随机产生的唯一名称,所以Session是相对安全的。失效时间和Cookie的失效时间一样,最后一个参数为可选参数,是放置Cookie的路径。

2、客户端禁止Cookie

当客户端禁用Cookie时,Session页面间传递会失效,可以将客户端禁止Cookie想象成一家大型连锁超市,如果在其中一家超市内办理了会员卡,但是超市之间并没有联网,那么会员卡就只能在办理的那家超市使用。解决这个问题有4种方法:

(1)在登录之前提醒用户必须打开Cookie,这是很多论坛的做法。

(2)设置php.ini文件中的session.use_trans_sid = 1,或者编译时打开-enable-trans-sid选项,让PHP自动跨页面传递session_id。

(3)通过GET方法,隐藏表单传递session_id。

(4)使用文件或者数据库存储session_id,在页面间传递中手动调用。

以上2种方法不做详细讲解,因为用户不能修改服务器的php.ini文件。第3种方法我们就不可以使用Cookie设置失效时间,但是登陆情况没有变化。

session可以保存多种数据类型

session不但保存字符串,还可以保存整型,布尔型,数组,对象等。

index1.php

<?php

session_start(); // 初始化session

$_SESSION['name'] = "zhangsan"; //保存某个session信息

$_SESSION['age'] = 100;

$_SESSION['isBoy'] = true;

$arr1 = array("北京","小明","hello");

$_SESSION['arr1'] = $arr1;

class Dog{

    private $name;

    private $age;

    private $intro;

    function __construct($name,$age,$intro){

        $this->name = $name;

        $this->age = $age;

        $this->intro = $intro;

    }

}

$dog1 = new Dog("大黄",2,"很听话");

$_SESSION['dog1'] = $dog1;

index2.php

<?php

session_start();

foreach($_SESSION as $key=>$value){

    echo $key.":";

    var_dump($value);

    echo "<br/>";

}

  先在网页中运行index1.php,再运行index2.php页面输出:

获取session信息


(1)直接获取所有session

(2)根据key获取

a)直接获取某个变量

b)获取数组

c)获取对象,session在保存对象时候,没法保存类的信息,因此在获取对象,需要先声明这个类。可以把类单独作为一个文件,存储和读取session时候分别引用这个文件。

6,Session的更新,就是根据key值重新保存session的值。

 Session的删除

(1) 指定删除session中某个键值对

(2) 删除所有session

Session数据默认存在时间是1440s(24分钟),可以在php.ini中修改, session.gc_maxlifetime = 1440。Session文件的存放路径是可以修改的,可以通过修改php.ini改变sesion文件存放路径,session.save_path = "tcp://127.0.0.1:11211"。

Session使用前,先进行初始化,session_start();这样比较麻烦,可以在php.ini设置session自动初始化,session.auto_start = 0(此方法不推荐)。

浏览器访问页面a.php时候,服务器产生一个session文件,将其存放在服务器,同时将session_id发送给浏览器,浏览器将其保存到cookie,浏览器再次访问b.php时候,从cookie中获取session_id发送到服务器,服务器根据session_id获取相应session内容。

实例:如果浏览器禁用cookie,怎么使用session呢?

使用URL重写的方式,url重写分为手动和自动。自动重写url就是配置php.ini,开启透明的SID,其他程序不变,自动重写url不安全,不建议使用。

开启透明SID,需要修改的php.ini是:

session.use_trans_sid = 1  //由0改为1

session.use_only_cookies = 0  //是否只使用cookie来保存session值  该参数为1时,上述机制失效。

session.use_cookies = 0  //设置客户端是否使用cookie来保存session值  该参数的值不影响上述机制的进行。这个可改可不改

手动模式:

index1.php

<?php

session_start();

$_SESSION['name'] = "zhangsan";

$_SESSION['age'] = 100;

echo  'session save succes! click <a href="index2.php?'.SID.'">here</a> to see SID<br/>';

index2.php

<?php

if($_GET["PHPSESSID"]){

    session_id($_GET["PHPSESSID"]);

}

session_start();

echo session_id().'<br/>';

echo $_SESSION['name'];

而自动模式,会将url后面自动添加PHPSESSID参数,所以在index1.php中去掉SID即可,index2.php不变。

index1.php

<?php

session_start();

$_SESSION['name'] = "zhangsan";

$_SESSION['age'] = 100;

echo  'session save succes! click <a href="index2.php">here</a> to see SID<br/>';

php.ini中关于session和cookie的配置

(1) session.use_trans_sid = 0,开启后,默认为每个url后添加了session_name=session_id。

(2) session.save_path=”c:/mysession”,save_path是session文件在服务器的存放路径。

(3) session.gc_maxlifetime = 1440,session默认最大生命周期,当session文件在1440s后没被访问的话,则该session被视为“垃圾文件”,并且等待gc(垃圾回收)进程的调用时候被清理掉;session.gc_probability=1;session.gc_divisor=1000;这两个参数根据网站规模合理设置。每当初始化一个session时候,有gc_probability/gc_divisor的概率执行一次垃圾回收。

我开启三个会话,则创建三个对应的session文件,当每个文件在30秒内都没被调用的话,就会被当成是“垃圾文件”,等到gc进程调用的时候,“垃圾文件”就会被unlink,因为之前我已经通过修改php.ini配置文件,将gc被调用的概率改成百分百,所以接下来,如果我重新使用任何一个浏览器刷新下页面的时候,三个session文件,应该只剩下一个了。

(4) session.cookie_lifetime,以秒数指定了发送到浏览器的cookie的生命周期,值为0表示“直到关闭浏览器”。默认为0。这个与程序中setCookie(“name”,”zhangsan”,time()+60);类似。

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
php会话机制之session的基本用法教程

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>


  用户登录