PHP会话技术

文章目录

1.COOKIE

  • setcookie(键,值):允许服务器端程序在浏览器存储数据的一种技术
    setcookie(键,值,有效期,有效路径,有效域名,是否https安全连接,是否httponly连接)
    (1)有效期:unix时间戳(1970到现在的秒数)如time()+3600,则该cookie一小时后过期
    (2)有效路径:规定 cookie 的服务器路径,如果路径设置为 “/”,那么 cookie 将在整个域名内有效.如果路径设置为 “/test/”,那么 cookie 将在 test 目录下及其所有子目录下有效。默认的路径值是 cookie 所处的当前目录
    (3)是否https安全连接:true的话则规定域名必须是https
    (4)是否httponly连接:true则仅允许在http请求是使用,因为js也可以获取cookie,httponly可以禁止浏览器其他脚步去使用cookie
  • cookie仅支持字符串类型的数据,不支持其他数据类型如数组的存储
    解决办法:serialize()序列化,想将要存储的某种特殊的数据类型转换为字符串,获取后,再反序列化,unserialize
    例:setcookie(‘array’,serialize([‘php’,‘java’]))
    反序列化var_dump(unserialize($_COOKE['array]))
  • COOKIE的安全性:
    (1)存登录状态cookie时,要保证用户的信息安全,在用户表中添加salt字段,为用户生成密码盐,提高密码的安全性,通过密码盐弥补了直接md5($password)的不足,验证时只需取出数据表的salt再比较即可
    $salt = md5(uniqid(microtime()));
    $password = md5($salt.md5($password));
    (2)存cookie时可将浏览器版本信息一齐放进
    $ua = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
    $cookie = md5($row['password'] . md5($ua.$row['salt']));
    (3)为防止JS读取alert(document.cookie),应在setcookie第七个参数设为true,HTTPonly,禁止JS访问

2.SESSION

  • 基本操作:
    (1)开启:session_start()
    (2)添加/修改/获取:$_SESSION[‘user’]=‘yyfs’;
    (3)删除:unset($_SESSION[‘user’])
  • 注意:
    (1)不要配置自动开启或者重复开启,后边的开启session_start()会被忽略,也会报错
    (2)默认每个session会话数据区,就是一个独立的文件,存储在服务器所在的操作系统中,有多个会话就会出现多个不同ID为文件名的文件
  • 设置session数据的属性:
    (1)直接配置php.ini
    (2)在脚本中,开启session之前使用函数进行配置
      1.ini_set(配置项,值):用于设置某个php配置选项
       例:ini_set(‘session.cookie_lifetime’,‘3600’):session的生存时间
         ini_set(‘session.cookie_domain’,’.yyfs.com’):设置session跨域
      2.session_set_cookie_params(有效期,有效路径,有效域,是否仅安全连接传输,是否httponly)
       例:session_set_cookie_params(3600,’/’,’.yyfs.com’):session的生存时间
    (3)设置session的失效时间还可以:setcookie(session_name,session_id(),time()+$time,’/’)
  • 重写session的存储机制:
    (1)将会话数据的存在服务器端,默认以文件形式存储于服务器操作系统的临时目录下,怎样更快的存储session数据,典型方法,改变session的存储机制为数据库/内存
    (2)形式:session_set_save_handler(开始函数,结束函数,读函数,写函数,删除函数,GC函数):在session运行到某个时间时会调用对应的函数。该函数要在session_start()之前被调用,如session_set_save_handler(‘sessBegin’,‘sessEnd’,‘sessRead’,‘sessWrite’,‘sessDelete’,‘sessGC’)
    (3)函数解释:
    sessBegin:开始操作,可将初始代码在该函数中完成,如数据库连接
    sessEnd:结尾操作,return true
    sessRead($sessid):读
    sessWrite($sessid,$sesscontent):写,如可以写如数据库
    sessDelete($sessid):删除,销毁session,删除对应的session数据区,同事关闭session机制
    sessGC:垃圾回收操作,回收服务器上过时的session数据区,默认为1440s,在php.ini中session.gc_maxlifetime = 1440中。开启session机制,会有几率地执行垃圾回收操作,概率为1/1000,在php.ini中的session.gc_probability = 1,session.gc_devision = 1000。则可在该函数写上数据库的删除操作,如delete from session where last_write < unix_timestamp() - $maxlifetime.
  • session_save_path():设置缓存文件的临时目录,可以缓解因临时文件的存储导致服务器效率降低和站点打开缓慢的问题
  • session缓存:并不是指在服务器端而是在客户端缓存,是将网页中的内容临时存储到 客户端 的 Temporary Internet Files 文件夹下,并且可以设置缓存时间。当第一次浏览网页后,页面的部分内容在规定的时间内就被临时存储在客户端的临时文件夹中,这样在下次访问这个页面的时候,就可以直接读取缓存中的内容,从而提高网站的浏览效率
    session_cache_limiter($limiter):创建缓存
    参数:
    nocache:不设置缓存,但公共变量可以缓存
    private:私有方式,会过期
    private_nocache:私有方式_不会过期
    public:公有方式
    session_cache_expire($time):设置缓存时间,单位为分钟,不填则默认180分钟
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值