您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

php中session一些基础知识_PHP教程

2024/3/8 21:29:52发布19次查看
在php中session是一个服务器全局变量可以实现页面之间传递了,所以session常用于服务器端用户会员登录验证,session的安全性也是非常高的,下面我来介绍一下关于php session基础知识。
大家对session有什么看法?不知道大家有没有研究过,今天达内php培训老师想要为大家分享一些有关这方面的内容,希望大家能够喜欢。
session 的生命周期是多长
1 浏览器结束时其生命周期也同时结束,但是档案仍然存在于 /tmp/(sess_?)
2 下次重新开浏览器时会重新分配 sessionid,如果你使用 session_id() 把以前的 id 带回来,则会去读取残存在 /tmp 处的 sess_?, 取回你之前所有已经设定的参数
3 可以在 php.ini 里修改 session 档案残存的时间
session.gc_maxlifetime = 1440 ; after this number of seconds, stored
 data will be seen as 'garbage' and
 cleaned up by the gc process
默认是 1440 秒,24分钟
使用 session 注意的存储路径问题
看看 php.ini 里对于 session 的设置
[session]
 session.save_handler = files ; handler used to store/retrieve data
 session.save_path = /tmp ; argument passed to save_handler
 in the case of files, this is the
 path where data files are stored
默认是存于 /tmp 目录下,这个目录可不一定真有啊!!! 最好改为你的 php 安装路径,比如 c:/php
彻底理解php的session机制 1.session.save_handler = files
    * 1. session_start()
         1. session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,
php自身的垃圾回收是无效的,session的回收是要删文件的,这个概率是根据php.ini的配置决定的,
但是有的系统是 session.gc_probability = 0,这也就是说概率是0,而是通过cron脚本来实现垃圾回收。
            session.gc_probability = 1
            session.gc_divisor = 1000
            session.gc_maxlifetime = 1440//过期时间 默认24分钟
            //概率是 session.gc_probability/session.gc_divisor 结果 1/1000,
            //不建议设置过小,因为session的垃圾回收,是需要检查每个文件是否过期的。
            session.save_path = //好像不同的系统默认不一样,有一种设置是 n;/path
            //这是随机分级存储,这个样的话,垃圾回收将不起作用,需要自己写脚本
         2. session会判断当前是否有$_cookie[session_name()];session_name()返回保存session_id的cookie键值,
这个值可以从php.ini找到
            session.name = phpsessid //默认值phpsessid
3. 如果不存在会生成一个session_id,然后把生成的session_id作为cookie的值传递到客户端.
相当于执行了下面cookie 操作,注意的是,这一步执行了setcookie()操作,cookie是在header头中发送的,
这之前是不能有输出的,php有另外一个函数 session_regenerate_id() 如果使用这个函数,这之前也是不能有输出的。
                setcookie(session_name(),
                          session_id(),
                          session.cookie_lifetime,//默认0
                          session.cookie_path,//默认'/'当前程序跟目录下都有效
                          session.cookie_domain,//默认为空
                          )
         4. 如果存在那么session_id = $_cookie[session_name];
            然后去session.save_path指定的文件夹里去找名字为'sess_' . session_id()的文件.
            读取文件的内容反序列化,然后放到$_session中
    * 2. 为$_session赋值
      比如新添加一个值$_session['test'] = 'blah'; 那么这个$_session只会维护在内存中,当脚本执行结束的时候,
用把$_session的值写入到session_id指定的文件夹中,然后关闭相关资源.      这个阶段有可能执行更改session_id的操作,
比如销毁一个旧的的session_id,生成一个全新的session_id.一半用在自定义 session操作,角色的转换上,
比如drupal.drupal的匿名用户有一个session的,当它登录后需要换用新的session_id
        if (isset($_cookie[session_name()])) {
          setcookie(session_name(), '', time() - 42000, '/');//旧session cookie过期
        }
        session_regenerate_id();//这一步会生成新的session_id
       //session_id()返回的是新的值
      3.写入session操作
      在脚本结束的时候会执行session写入操作,把$_session中值写入到session_id命名的文件中,可能已经存在,
可能需要创建新的文件。
    * 4. 销毁session
      session发出去的cookie一般属于即时cookie,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期,
比如 退出登录,而不是关闭浏览器,那么就需要在代码里销毁session,方法有很多,
          o 1. setcookie(session_name(), session_id(), time() - 8000000, ..);//退出登录前执行
          o 2. usset($_session);//这会删除所有的$_session数据,刷新后,有cookie传过来,但是没有数据。
          o 3. session_destroy();//这个作用更彻底,删除$_session 删除session文件,和session_id
      当不关闭浏览器的情况下,再次刷新,2和3都会有cookie传过来,但是找不到数据
2.session.save_handler = user
      用户自定义session处理机制,更加直观
    * session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');
1.session_start(),
      执行open($save_path, $session_name)打开session操作句柄
      $save_path 在session.save_handler = files的情况下它就是session.save_path,
但是如果用户自定的话,这个两个参数都用不上,直接返回true
      执行read($id)从中读取数据.//这个参数是自动传递的就是session_id(),可以通过这个值进行操作。
    * 2.脚本执行结束
      执行write($id, $sess_data) //两个参数,很简单
    * 3.假如用户需要session_destroy()
      先执行destroy.在执行第2步
      一个实际例子:
 代码如下 复制代码
      //session初始化的时候调用
      function open($save_path, $session_name)
      {
        global $sess_save_path;
        $sess_save_path = $save_path;
        return(true);
      }
      //关闭的时候调用
      function close()
      {
        return(true);
      }
      function read($id)
      {
        global $sess_save_path;
        $sess_file = $sess_save_path/sess_$id;
        return (string) @file_get_contents($sess_file);
      }
      //脚本执行结束之前,执行写入操作
      function write($id, $sess_data)
      {
        echo sdfsf;
        global $sess_save_path;
        $sess_file = $sess_save_path/sess_$id;
        if ($fp = @fopen($sess_file, w)) {
          $return = fwrite($fp, $sess_data);
          fclose($fp);
          return $return;
        } else {
          return(false);
        }
      }
      function destroy($id)
      {
        global $sess_save_path;
        $sess_file = $sess_save_path/sess_$id;
        return(@unlink($sess_file));
      }
      function gc($maxlifetime)
      {
        global $sess_save_path;
        foreach (glob($sess_save_path/sess_*) as $filename) {
          if (filemtime($filename) + $maxlifetime             @unlink($filename);
          }
        }
        return true;
      }

php session在您把用户信息存储到 php session 中之前,首先必须启动会话。
注释:session_start() 函数必须位于 标签之前:
 代码如下 复制代码
php session_start(); ?>
上面的代码会向服务器注册用户的会话,以便您可以开始保存用户信息,同时会为用户会话分配一个 uid。
存储 session 变量
存储和取回 session 变量的正确方法是使用 php $_session 变量:
 代码如下 复制代码
输出:
pageviews=1
http://www.bkjia.com/phpjc/632652.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/632652.htmltecharticle在php中session是一个服务器全局变量可以实现页面之间传递了,所以session常用于服务器端用户会员登录验证,session的安全性也是非常高的,...
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product