设为首页 收藏本站
查看: 1120|回复: 0

[经验分享] Session [php]

[复制链接]

尚未签到

发表于 2015-8-22 18:26:26 | 显示全部楼层 |阅读模式
启动会话 — 注册会话 — 使用会话 — 删除会话
  1.启动会话
  session_start()
  通过session_register()函数创建会话
  session_register()函数用来为会话登录一个变量来隐含地启动会话,但要求php.ini文件的选项,将register_globals指令设置on,
  然后重新启动Apache服务器。
  注意:调用session_register()时,不需要调用session_start()函数,PHP会在注册变量后隐含的调用session_start()函数。
  2.注册会话
  会话启动后,全部保存在$_SESSION中。通过数组$_SESSION创建一个会话变量很容易,只要直接该数组添加元素即可。




<?php
session_start();          //启动session

$_SESSION["admin"] = null;    //生命一个admin的变量,并赋空值

?>
  3.使用会话
  首先判断会话变量是否有一个会话ID存在,不存在就创建一个,并且使其能通过全局数组$_SESSION 进行访问。如存在,则讲这个会话变量载入以供用户使用。
  例如,判断用户名Session会话变量是否为空,不为空则复制给$myvalue,




<?php
if(!empty($_SESSION['session_name']))
  $myvalue = $_SESSION['session_name'];  
?>
  4.删除会话
  (1)删除单个会话
  使用unset(),但是不能使用unset($_SESSION) 函数会将全局变量$_SESSION销毁,无法恢复,用户也不能再注册$_SESSION 变量。




unset($_SESSION['user']);
  (2)删除多个会话




$_SESSION = array();
  (3)结束会话




session_destroy();
  session设置时间
  1.客户端没禁止cookie
    (1) session_set_cookie_params() 必须在 session_start() 之前调用




<?php
$time = 1*60;              //设置Session失效时间
session_set_cookie_params($time);  //使用函数
session_start();                //初始化Session
$_SESSION[username] = 'mr';
?>
  说明:不推荐使用此函数,一些浏览器有问题。
    (2) 使用Setcookie()




<?php
session_start();
$time = 1*60;                        //给出Session失效时间,1分钟

setcookie(session_name(),session_id(),time()+$time,"/");  //使用setcookie()手动设置Session失效时间

$_SESSION['user']='mr';
?>
  2.客户端禁止Cookie
    (1)登录之前打开Cookie,很多论坛这么做
    (2)通过GET方法,隐藏表单传递session_id  (常用)
    (3)使用文件或数据库存储session_id,页面传递中手动调用
   
  

  ======================分===========割============线================
  Session高级应用
  1.Session临时文件
  session_save_path()存储session临时文件,可缓解因临时文件的存储导致服务器效率降低和站点打开缓慢的问题
  示例:




<?php
$path = './tmp/';                            // 设置session存储路径
session_save_path($path);                    
session_start();                            // 初始化session
$_SESSION[username] = true;
echo "Session文件名称为:sess_" , session_id();
?>
  注意:session_save_path()在session_start()函数之间
   
  
  2.Session缓存
  session缓存是将内容存储在IE客户端的Temporary Internet Files 文件夹下,可设置缓存时间,下次读取缓存内容,从而提速。
  Session 缓存使用 session_cache_limiter() 函数




string session_cache_limiter([string cache_limiter])
  参数cache_limiter为public 或private。同时session缓存不在服务器端而是在客户端缓存,在服务器没显示。
  缓存时间,使用 session_cache_expire() 函数




int session_cache_expire([int new_cache_expire])
  示例:




<?php
session_cache_limiter('private');
$cache_limit = session_cache_limiter();
session_cache_expire(30);
$cache_expire = session_cache_expire();
session_start();
?>
  3.session数据库存储
  session_set_save_handler()函数




bool session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)


参数说明
open(save_path,session_name)找到session存储地址,去除变量
close()不需要参数,关闭数据库
read(key)读取session键值,key对应session_id
write(key,data)其中data对应设置的session变量
destroy(key)注销session对应session键值
gc(expiry_time)清除过期session记录
  示例:



<?php
function _session_open($save_path,$session_name)
{
global $handle;
$handle = mysql_connect('localhost','root','root') or die('数据库连接失败');// 连接MYSQL数据库
mysql_select_db('db_database11',$handle) or die('数据库中没有此库名');// 找到数据库
return(true);
}
function _session_close()
{
global $handle;
mysql_close($handle);
return(true);
}
function _session_read($key)
{
global $handle;// 全局变量$handle 连接数据库
$time = time();// 设定当前时间
$sql = "select session_data from tb_session where session_key = '$key' and session_time > $time";
$result = mysql_query($sql,$handle);
$row = mysql_fetch_array($result);
if ($row)
{
return($row['session_data']);// 返回Session名称及内容
}else
{
return(false);
}
}
function _session_write($key,$data)
{
global $handle;
$time = 60*60;// 设置失效时间
$lapse_time = time() + $time;// 得到Unix时间戳
$sql = "select session_data from tb_session where session_key = '$key' and session_time > $lapse_time";
$result = mysql_query($sql,$handle);
if (mysql_num_rows($result) == 0 )// 没有结果
{
$sql = "insert into tb_session values('$key','$data',$lapse_time)";// 插入数据库sql语句
$result = mysql_query($sql,$handle);
}else
{
$sql = "update tb_session set session_key = '$key',session_data = '$data',session_time = $lapse_time where session_key = '$key'";// 修改数据库sql语句
$result = mysql_query($sql,$handle);
}
return($result);
}
function _session_destroy($key)
{
global $handle;
$sql = "delete from tb_session where session_key = '$key'";// 删除数据库sql语句
$result = mysql_query($sql,$handle);
return($result);
}
function _session_gc($expiry_time)
{
global $handle;
$lapse_time = time();// 将参数$expiry_time赋值为当前时间戳
$sql = "delete from tb_session where expiry_time < $lapse_time";// 删除数据库sql语句
$result = mysql_query($sql,$handle);
return($result);
}
session_set_save_handler('_session_open','_session_close','_session_read','_session_write','_session_destroy','_session_gc');
session_start();
$_SESSION['user'] = 'mr';
$_SESSION['pwd'] = 'mrsoft';
?>

  ======================分===========割============线================

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-102755-1-1.html 上篇帖子: PHP Code Reviewing Learning 下篇帖子: PHP乱码问题,UTF-8(乱码)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表