百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

session高级用法 session常用方法

yuyutoo 2024-10-12 01:25 6 浏览 0 评论

一、介绍SESSIO信息写入到自己定义的位置

1. 解决跨机保存SESSION

在Linux下可以使用nfs或是samba, 共享文件夹的方式

使用数据库来实现

memcache来保存会话信息

session_set_save_handler()

2. 解决在线用户信息

二、介绍一下PHP配置文件中的常用选择(php.ini) (以下参数的值都用的是默认值)

session.name = PHPSESSID

session.name = PHPSESSID 用在cookie里的会话ID标识名,只能包含字母和数字。(此项也可以使用引号包起来的字符串"PHPSESSID")

session_name()获取会话名称的默认值来自此项的"PHPSESSID"


session.use_trans_sid = off

是否启用SID的支持


session.save_path = "N;/path"

传递给存储处理器的参数。对于files处理器,此值是创建会话数据文件的路径。

session.save_path = "N;/path" 为默认值

session.save_path = "/tmp" Windows下默认为临时文件夹路径。

session.save_path = "N;/path" 你可以使用"N;[MODE;]/path"这样模式定义该路径(N是一个整数)。"N;MODE;/path"

N表示使用N层深度的子目录,而不是将所有数据文件都保存在一个目录下。

[MODE;]可选, 必须使用8进制数, 默认600(=384), 表示每个目录下最多保存的会话文件数量。

这是一个提高大量会话性能的好主意。

注意0: "N;[MODE;]/path"两边的双引号不能省略。

注意1: [MODE;]并不会改写进程的umask。

注意2: PHP不会自动创建这些文件夹结构。请使用ext/session目录下的mod_files.sh脚本创建。

注意3: 如果该文件夹可以被不安全的用户访问(比如默认的"/tmp"),那么将会带来安全漏洞。

注意4: 当N>0时自动垃圾回收将会失效,具体参见下面有关垃圾搜集的部分。

session.use_cookies = 1

是否使用cookies在客户端保存会话sessionid, 默认为采用cookies

session.use_only_cookies = 0

此项php.ini配置文件session.use_only_cookies = 1前面的分号去掉(未生效)

  是否仅仅使用cookie在客户端保存会话sessionid, 这个选项可以使管理员禁止用户通过URL来传递id, 默认为1,

  如果禁用的话, 客户端如果禁用Cookie将使session无法工作。


session.cookie_path = / 传递会话ID的Cookie作用路径(也可以使用引号包起来的路径"/")

session.cookie_domain = 传递会话ID的Cookie作用域。(默认php.ini配置文件未设置)

session.cookie_lifetime = 0 传递会话ID的Cookie有效期(秒), 0 表示仅在浏览器打开期间有效。session.cookie_domain = .aaa.com,.bbb.com

session.save_handler = files

files 使用文件方式保存, 为默认值

memcache 使用memcache保存session

user 自定义的处理器(如基于数据库的处理器)


session.gc_maxlifetime = 1440

garbage collection 垃圾回收

指定过了多少秒之后数据就会被视为"垃圾",并被清除


session.gc_probability=1
session.gc_divisor=100

这两个合起来就是启动gc进程管理概率的

初使化时(session_start())

session.gc_probability/session.gc_divisor

1/100

三、介绍一下session_set_save_handler()函数的使用

实际项目中,以文件的形式存储session数据,当session过多时,而且session的操作算是频繁的操作,每次脚本周期至少操作2次。

为了提升session数据区操作效率,通常将session以其他方式存储:数据库、内存,仅仅需要重写与session数据区存储相关的操作即可!

必须修改php.ini配置文件,才能使用此函数

session.save_handler = user


session_set_save_handler()


<?php
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)
{
    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) { //glob — 寻找与模式匹配的文件路径,返回值为数组
        if (filemtime($filename) + $maxlifetime < time()) {
        @unlink($filename);
        }
    }
    return true;
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
// proceed to use sessions normally
$_SESSION["username"] = "admin";
?>

相关推荐

MATLAB实例讲解—求二元函数的极值

实例程序...

解析式大赛的获奖作品代码和公式公布啦!

上方超级数学建模可加关注传播数学干货,学会理性的方式去思考问题大家期待已久的运行代码终于新鲜出炉了!!!抱歉让各位粉丝久等了接下来就是揭秘奇迹的时刻1、emoji解析式:无代码:holdon...

基于MATLAB的ACC控制算法设计及仿真测试

作者...

MATLAB基础学习之坐标转换(matlab改坐标)

(一)平面坐标转换1.cart2pol:将笛卡尔坐标转换为极坐标;2.pol2cart:将极坐标转换为笛卡尔坐标;(二)立体坐标转换1.cart2sph:将笛卡尔坐标转换为极坐标;2.sph2cart...

Java NIO:从 Buffer、Channel、Selector 到 Zero-copy、I/O 多路复用

NIO...

「太极创客」零基础入门学用物联网 - MQTT篇 1-9 自我测试

到目前为止,我们已经掌握了MQTT通讯的基本流程以及如何使用ESP8266来发布和订阅MQTT消息。这节课我们来进行自我测试。...

用豆包改了一下午程序,感觉它聪明得超乎想象

之前低估了AI的聪明程度,AI持续学习下去,未来可以做的事情太多了,编程已经算是比较复杂的事情都能完成得这么好,那些项目计划、工作报告更是小儿科。今天用豆包改了几个程序,提出的BUG也能修改完成...

Node-Media-Server开源流行Nodejs流媒体服务器

简介Node-Media-Server一个Node.js实现的RTMP/HTTP/WebSocket/HLS/DASH流媒体服务器。开源github地址:https://github.com/il...

如何应对 RAG 开发挑战?12 个痛点逐一击破

受到论文《SevenFailurePointsWhenEngineeringaRetrievalAugmentedGenerationSystem》的启发,并结合实际开发RAG(检...

团队协作-代码格式化工具clang-format

环境:clang-format:10.0.0前言统一的代码规范对于整个团队来说十分重要,通过git/svn在提交前进行统一的ClangFormat格式化,可以有效避免由于人工操作带来的代码格式问题。C...

如何编写自己的Arduino库?(arduino怎么自己写库)

支持一对一答疑的购买地址...

Auto CAD 命令(A)(cad命令aaw)

ABOUT(命令)显示有关产品的信息。...

一文读懂设计模式,看这篇就够了(设计模式是干嘛的)

转载:javadoop.com/post/design-pattern一直想写一篇介绍设计模式的文章,让读者可以很快看完,而且一看就懂,看懂就会用,同时不会将各个模式搞混。自认为本文还是写得不错的,花...

ASL开发者指南:构建健壮高效的C++应用

1.库介绍AdobeSourceLibraries(ASL),现在由stlab维护,是一组专注于提供高质量、经过实战检验的C++组件的集合。它最初由Adobe公司开发,旨在解决构建...

linux下GDB使用方法(linux怎么用gdb调试)

gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。一般来说,GDB主要帮助你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程...

取消回复欢迎 发表评论: