PHP存储Session

海康工业相机触发模式详解:软触发 vs 外触发,在C#里如何选与用? 本文深入解析海康工业相机的软触发与外触发模式,详细比较两者的特性差异、适用场景及C#实现方法。通过海康SDK配置指南和实战代码示例,帮助开发者掌握工业相机触发模式的选择与优化技巧,提升自动化检测系统的精确性和可靠性。 阅读详情

一 Redis

方法一:

配置文件php.ini,修改为下面内容,保存并重启服务

session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

方法二:
直接在代码中加入以下内容:

<?php  
ini_set("session.save_handler", "redis");
ini_set("session.save_path", "tcp://127.0.0.1:6379");
?>

如果redis配置文件redis.conf里设置了连接密码requirepass,save_path需要这样写tcp://127.0.0.1:6379?auth=连接密码。

二 Memcache

方式一:

php.ini 文件,修改下面两个参数:

session.save_handler = memcache  
session.save_path = "tcp://Mem服务器1:端口号,tcp://Mem服务器2:端口号..."

方式二:

在 php 文件中使用 ini_set 函数

<?php  
ini_set("session.save_handler", "memcache");  
ini_set("session.save_path", "tcp://Mem服务器1:端口号,tcp://Mem服务器2:端口号...");  
?>

如果安装的PECL是memcached(使用libmemcache库的那个),则配置应为

ini_set("session.save_handler", "memcached"); // 不是memcache
ini_set("session.save_path", "127.0.0.1:11211"); // 不要tcp:

三 回调函数方式

bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid ] )

  • open
    自动开始会话或者通过调用 session_start() 手动开始会话之后第一个被调用的回调函数。 成功返回 TRUE,反之返回 FALSE。

  • close
    回调函数类似于类的析构函数。脚本执行完成 或 调用session_write_close()或session_destroy()时被执行,即在所有session操作完后被执行。

  • read
    会话读取数据,read 回调函数必须返回将会话数据编码(序列化)后的字符串。 如果会话中没有数据,read 回调函数返回空字符串。 在调用 read 之前,PHP 会调用 open 回调函数。read 回调返回的序列化之后的字符串格式必须与 write 回调函数保存数据时的格式完全一致。 PHP 会自动反序列化返回的字符串并填充 $_SESSION 超级全局变量。 虽然数据看起来和 serialize() 函数很相似, 但是需要提醒的是,它们是不同的。 请参考: session.serialize_handler。

  • write
    会话保存数据。 此回调函数接收当前会话 ID 以及 $_SESSION 中数据序列化之后的字符串作为参数。 序列化会话数据的过程由 PHP 根据 session.serialize_handler 设定值来完成。PHP 会在脚本执行完毕或调用 session_write_close() 函数之后调用此回调函数。 注意,在调用完此回调函数之后,PHP 内部会调用 close 回调函数。
    PHP 会在输出流写入完毕并且关闭之后 才调用 write 回调函数, 所以在 write 回调函数中的调试信息不会输出到浏览器中。 如果需要在 write 回调函数中使用调试输出, 建议将调试输出写入到文件。

  • destroy
    当调用 session_destroy()函数, 或者调用session_regenerate_id()函数并且设置 destroy 参数为 TRUE 时, 会调用此回调函数。

  • gc
    清理会话中的旧数据,PHP 会不时的调用垃圾收集回调函数。 调用周期由 session.gc_probability 和session.gc_divisor参数控制。 传入到此回调函数的 lifetime 参数由 session.gc_maxlifetime 设置。

  • create_sid
    当需要新的会话 ID 时被调用的回调函数。

<?php
class FileSessionHandler
{
    private $savePath;

    //启动session
    function open($savePath, $sessionName)
    {
        $this->savePath = $savePath;
        if (!is_dir($this->savePath)) {
            mkdir($this->savePath, 0777);
        }

        return true;
    }

    //关闭session
    function close()
    {
        return true;
    }

    //读取session
    function read($id)
    {
        return (string)@file_get_contents("$this->savePath/sess_$id");
    }

    //写入session
    function write($id, $data)
    {
        return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
    }

    //销毁session
    function destroy($id)
    {
        $file = "$this->savePath/sess_$id";
        if (file_exists($file)) {
            unlink($file);
        }

        return true;
    }

    //销毁session
    function gc($maxlifetime)
    {
        foreach (glob("$this->savePath/sess_*") as $file) {
            if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
                unlink($file);
            }
        }

        return true;
    }
}

$handler = new FileSessionHandler();
session_set_save_handler(
    array($handler, 'open'),
    array($handler, 'close'),
    array($handler, 'read'),
    array($handler, 'write'),
    array($handler, 'destroy'),
    array($handler, 'gc')
    );

// 下面这行代码可以防止使用对象作为会话保存管理器时可能引发的非预期行为
// 脚本执行完毕之后,内部会清除对象,有可能不调用 write 和 close 回调函数。 
register_shutdown_function('session_write_close');

session_start();
// 现在可以使用 $_SESSION 保存以及获取数据了

四 会话类处理类

使用sessionhandler添加加密PHP内部保存处理程序。

<?php

 /**
  * decrypt AES 256
  *
  * @param data $edata
  * @param string $password
  * @return decrypted data
  */
function decrypt($edata, $password) {
    $data = base64_decode($edata);
    $salt = substr($data, 0, 16);
    $ct = substr($data, 16);

    $rounds = 3; // depends on key length
    $data00 = $password.$salt;
    $hash = array();
    $hash[0] = hash('sha256', $data00, true);
    $result = $hash[0];
    for ($i = 1; $i < $rounds; $i++) {
        $hash[$i] = hash('sha256', $hash[$i - 1].$data00, true);
        $result .= $hash[$i];
    }
    $key = substr($result, 0, 32);
    $iv  = substr($result, 32,16);

    return openssl_decrypt($ct, 'AES-256-CBC', $key, true, $iv);
  }

/**
 * crypt AES 256
 *
 * @param data $data
 * @param string $password
 * @return base64 encrypted data
 */
function encrypt($data, $password) {
    // Set a random salt
    $salt = openssl_random_pseudo_bytes(16);

    $salted = '';
    $dx = '';
    // Salt the key(32) and iv(16) = 48
    while (strlen($salted) < 48) {
      $dx = hash('sha256', $dx.$password.$salt, true);
      $salted .= $dx;
    }

    $key = substr($salted, 0, 32);
    $iv  = substr($salted, 32,16);

    $encrypted_data = openssl_encrypt($data, 'AES-256-CBC', $key, true, $iv);
    return base64_encode($salt . $encrypted_data);
}

class EncryptedSessionHandler extends SessionHandler
{
    private $key;

    public function __construct($key)
    {
        $this->key = $key;
    }

    public function read($id)
    {
        $data = parent::read($id);

        if (!$data) {
            return "";
        } else {
            return decrypt($data, $this->key);
        }
    }

    public function write($id, $data)
    {
        $data = encrypt($data, $this->key);

        return parent::write($id, $data);
    }
}

ini_set('session.save_handler', 'files');
$key = 'secret_string';
$handler = new EncryptedSessionHandler($key);
session_set_save_handler($handler, true);
session_start();

五 会话管理器接口

PHP > 5.4

//Database
CREATE TABLE `Session` (
  `Session_Id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `Session_Expires` datetime NOT NULL,
  `Session_Data` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`Session_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
SELECT * FROM mydatabase.Session;
<?php

class SysSession implements SessionHandlerInterface
{
    private $link;

    //开启session
    public function open($savePath, $sessionName)
    {
        $link = mysqli_connect("server","user","pwd","mydatabase");
        if($link){
            $this->link = $link;
            return true;
        }else{
            return false;
        }
    }

    //关闭session
    public function close()
    {
        mysqli_close($this->link);
        return true;
    }

    //读取session
    public function read($id)
    {
        $sql = "SELECT Session_Data FROM Session WHERE Session_Id = '".$id."' AND Session_Expires > '".date('Y-m-d H:i:s')."'";
        $result = mysqli_query($this->link,$sql);
        if($row = mysqli_fetch_assoc($result)){
            return $row['Session_Data'];
        }else{
            return "";
        }
    }

    //写入session
    public function write($id, $data)
    {
        $DateTime = date('Y-m-d H:i:s');
        $NewDateTime = date('Y-m-d H:i:s',strtotime($DateTime.' + 1 hour'));
        $sql = "REPLACE INTO Session SET Session_Id = '".$id."', Session_Expires = '".$NewDateTime."', Session_Data = '".$data."'";
        $result = mysqli_query($this->link,$sql );
        if($result){
            return true;
        }else{
            return false;
        }
    }

    //销毁session
    public function destroy($id)
    {
        $sql = "DELETE FROM Session WHERE Session_Id ='".$id."'";
        $result = mysqli_query($this->link,$sql);
        if($result){
            return true;
        }else{
            return false;
        }
    }

    //回收session
    public function gc($maxlifetime)
    {
        $sql = "DELETE FROM Session WHERE ((UNIX_TIMESTAMP(Session_Expires) + ".$maxlifetime.") < ".$maxlifetime.")";
        $result = mysqli_query($this->link,$sql);
        if($result){
            return true;
        }else{
            return false;
        }
    }
}

$handler = new SysSession();

// 下面这行代码可以防止使用对象作为会话保存管理器时可能引发的非预期行为
session_set_save_handler($handler, true);
?>
倍福--实现TCP/IP的配置 控制器为CX5120,需要和上位机做通信,选择TCP/IP的通讯方式,本文介绍TCP/IP通信的操作步骤。 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制软件 3 1.2. 串口调试助手 3 1.2.1. TCP调试通信助手 3 授权文件 3 2.1 Lib文件 3 2.2. CAB文件 4 PLC程序编写 4 3.1. 引入TCP/IP库文件 4 3.2. Client端程序 5 3.2.1. 建立相关变量 5 3.3.2. 编写连接功能块 阅读详情

相关推荐

基于gem5模拟trace的cache模拟器的实现

在做计算机体系结构的时候,模拟器是一个重要且又有效的工具。其中gem5集成了gem和m5的优点,使用起来比较简单和方便。其中包括了se模式和fs模式,se模式是在gem5运行我们已经编译好的程序,可以获取cache,cpu状态等数据,fs模式下可以模拟操作系统,我们可以将我们自己修改的linux内核加载到哥们上运行。下面介绍了使用gem5的se模式,运行编译好的ARM可执行文件。获取访存的trac

gaoxiang的专栏 8891

php将sessionid存入mysql_PHP中如何将session存入数据库并使用

这篇文章给大家介绍的内容是关于PHP中如何将session存入数据库并使用(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。实例说明:将SESSION数据变量存储于服务器是端是一种较安全的做法,但是设想一下,像校内网这样的日访问量过亿,拥有用户几千万的大型网站,如果将所有用户SESSION数据全部存储于服务器端,将消耗巨大的服务器资源。所以程序员在制作大型网站时将SESSI...

weixin_35893552的博客 473

从拧螺丝到精密装配:三菱伺服电机扭矩控制在工业自动化中的实战解析

本文深入解析三菱伺服电机扭矩控制在工业自动化中的实战应用,重点介绍MR-J4系列伺服系统的高精度扭矩响应技术。从螺丝紧固到精密装配,详细讲解扭矩控制模式的选择、硬件配置、参数设置及典型故障排查方案,帮助工程师提升生产效率和产品质量。

weixin_29186249的博客 470

PHP实现session共享

通过修改PHP-FPM配置文件,实现session会话共享: - 配置PHP使用memcached服务器共享Session信息 - 客户端访问两台不同的后端Web服务器时,Session 信息一致 环境: - 部署LNMP+memcached网站平台, 参考之前的随笔,这里不做介绍 - Nginx服务器除了承担调度器外,还需要担任memcached数据库的角色,并在两台后端LN...

ansheng0239的博客 182

智能车实战——极速越野组GPS与惯导融合定位导航全解析

本文深入解析了智能车极速越野组中GPS与惯导模块的融合定位导航技术。通过对比GPS的全局定位与惯导的高频姿态感知,详细阐述了如何利用MM32SPN27主控,将两者数据融合以实现精准、实时的车辆控制。内容涵盖硬件选型、软件数据处理、PID控制及系统调试等实战环节,为智能车开发者提供了一套完整的解决方案。

pz8901234的博客 1203

TwinCAT3新手必看:5分钟搞定EtherCAT从站PDO动态配置(附电流变量添加技巧)

本文为TwinCAT3新手提供了EtherCAT从站PDO动态配置的快速入门指南。文章详细解析了Process Data Object(PDO)在实时数据交换中的核心作用,并分步演示了在TwinCAT3工程中扫描从站、动态添加与映射PDO(包括接收PDO和发送PDO)的完整操作流程。重点分享了如何灵活添加并监控如电机实际电流等关键工艺变量的高级技巧,并针对不同品牌驱动器的兼容性问题提供了实用的调试心法和解决方案,帮助工程师快速上手并优化工业自动化系统。

xgboost6farmer的博客 452

php的Session和Cookie存储流程理解

php程序的Session和Cookie存储流程学习和理解

oraclechaozi的专栏 768

Edge浏览器IE模式全攻略:从企业应用到老旧网站兼容(含常见问题解答)

本文详细解析了微软Edge浏览器的IE模式,这是解决企业遗留系统与老旧网站兼容性问题的关键技术。文章从核心原理出发,提供了从个人用户临时启用到企业级组策略部署的完整配置指南,并深入探讨了文档模式调优、ActiveX控件处理等高级技巧,最后汇总了常见问题排查与安全实践,帮助用户高效平衡兼容性与现代化浏览体验。

weixin_29227425的博客 609

PHP中使用memcache存储session的三种配置方法

1、直接修改php.ini配置文件session.save_handler=memcache//设置session的储存方式为memcache memcache.hash_strategy="consistent"//设置memcache的hash算法 session.save_path="tcp://127.0.0.100:11211"//设置sess...

weixin_34126215的博客 133

Redis+Unity 数据库搭建

游戏中需要存放排行榜等数据,而且是实时存放,所以就涉及到数据库的问题。这里找服务器大神了解到可以用Redis来做存储,免费的效率极高。

chaixinke的专栏 879

基于MATLAB开发AUTOSAR软件应用层模块-part3.自动生成的代码文件介绍

上篇文章我们介绍了如何设计一个简单的模型,之后自动生成autosar架构的代码,这篇文章我带大家看下,生成了哪些文件,以及这些文件的内容。 生成的文件见下图: model files是模型控制逻辑部分代码,包括 DEMO1.c DEMO1.h DEMO1_private.h DEMO1_types.h DEMO1.c 1 /* 2 * File: DEMO1.c 3 * 4 * Cod.

汽车软件开发 1977

Session(会话)

session 学习笔记

chou142857的博客 977

Python赋能,洞见先机:构建基于异步爬虫与流处理的实时舆情监控系统

我们将从核心概念入手,逐步搭建一个集。.option("es.resource", "public-opinion-%s" % time.strftime("%Y-%m-%d")) \ # 按日期分索引。| 数据采集层 |----->| 消息队列层 |----->| 流处理与分析层 |----->| 存储与可视化层 |:使用Spark Streaming的状态操作或Flink的CEP库,检测更复杂的模式,如“某关键词的负面舆情在1小时内激增500%”。

2201_76125261的博客 433

PHP将SESSION存储到Redis中

大家都知道使用session的时候都是通过操作$_SESSION变量来实现session的存取,如果要将session存储到Redis中,就需要知道$_SESSION是怎么运作的。 在PHP配置文件php.ini中规定了session的存储方式和路径。 其中session.save_handler 定义存储和获取与会话关联的数据的处理器的名字。默认为 files(文件存储)。session...

黑夜开发者的博客 1602

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

php api session 存储,PHP SESSION机制,从存储到读取

PHP中,如果要获取SESSION数据,必须要有对应的session_id,session_id的获取方式有两种1.基于客户端的cookie2.基于url先说第一种情况,基于客户端的cookie.服务器端的脚本在开启session后,会依据php.ini来存储session,下面列举一些session.save_handler 定义存储和获取与会话关联的数据的处理器的名字。默认为 files。如果...

weixin_32559133的博客 628

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

PHP将Session存储在NoSql中

Session存储在NoSql中 PHP中SESSION过期,指的是,超过多少时间不活动,则过期。 如果用户有活动,每次活动时session都会重新write一次。即你说的会自动更新最后的修改时间。 比如,session设置20分钟过期,用户每分钟刷新一次,连续刷新60次,那么一个小时他还是...

chuanguan1820的博客 278

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

php session存储

session默认缓存文件是存放在本地的,可以通过配置修改sesson数据存储到数据库中. session.save_handler的默认值是files,代表session缓存在本地文件,修改值为 user 代表自定义 session.auto_start的默认值是1,代表自动开启会话,修改其值为0,代表关闭会话,如果想开启会话需要调用session_start(), 在php.i...

mysteryflower的专栏 2055

php api session 存储,关于PHP中session 存储方式的详细介绍

关于PHP中session 存储方式的详细介绍文章是对PHP中的session存储方式进行了详细的分析介绍,需要的朋友参考下.PHP为sesion的存储提供了三种方式: 文件/ 内存/ 自定义存储,默认是使用文件存储.在访问量大的网站上采用这种方式就不大合适,因为这样会导致大量的输入输出的`冗余.下面介绍一种基于Mysql数据库的session存储方式.首先要进行的配置如下:1>php.in...

weixin_35117321的博客 215

php session redis存储,php实现Session存储到Redis

php实现Session存储到Redis介绍了php实现Session存储到Redis的方法,php Session可以保存到文本或者内存、还有数据库,本文讲的是存到Redis的方法.对于大访问量的站点使用默认的Session 并不合适,我们可以将其存入数据库、或者使用Redis KEY-VALUE数据存储方案首先新建一个session表CREATE TABLE `sessions` (`sid`...

weixin_39617685的博客 222

php session之存储在redis的方法

安装redis 安装redis https://www.xstnet.com/article-50.html 安装phpredis扩展 https://www.xstnet.com/article-42.html 设置php.ini 打开php.ini, 查找session.save_handle, 将其值设置为 redis 查找session.save_path, 将其设置为"tcp://...

醉春风的博客 7041

php session 存储方式,Session 的存储方式

Session 的存储方式在 php.ini 文件中,进行配置。涉及配置参数:- session.save_handler- session.save_path注意:这两个参数可以在 PHP 中通过 ini_set 来设置,不用直接覆盖原 php.ini 中的值。一、文件存储session.save_handler = filessession.save_path = "N;MODE;/path"...

weixin_33513842的博客 667

配置php.ini把session存储到redis

PHP 7.2.10 当我们的系统开启了session,当遇到大并发的时候,不可避免的会在服务器上存储有大量的session文件,默认的session方式为文件,而大量小文件的查找效率是很低,肯定会影响系统性能,所以必须设置session的管理方式,常用的为redis。 方法1: 在不修改任何配置的情况下。如果开启了session,可以通过 session_id() 函数来获取/设置当前会话 ID...

猛犸象 3496

php session存储到redis

方法一:修改 php.ini 的设置 session.save_handler=redis session.save_path=“tcp:127.0.0.1:6379?auth=password” 修改后,重启php-fpm。 方法二:通过 ini_set() 函数设置 ini_set(“session.save_handler”, “redis”); ini_set(“session.save_...

天宝的博客 773

php怎么存session中,关于PHP中session 存储方式的详细介绍

关于PHP中session 存储方式的详细介绍{//执行SQL语句插入Session的值$query = @mysql_query("insert into mysession values('$key', '$data', $expiry_time)")or die("SQL语句执行失败");}else{//执行SQL语句更新Session的值$query = @mysql_query("upd...

weixin_28998851的博客 529

php重写session,php如何重写session的存储机制

这篇文章主要介绍了关于php如何重写session的存储机制,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下Session数据区默认以 文件的形式存储与服务器操作系统临时目录中!当 session数据区过多时,文件形式的存储,操作速度变慢。磁盘的读写(IO,input/output)开销是很大的。实际项目中,都会采用其他的方式更快地存储session数据。典型的办法:数据库,内存。以...

weixin_30498015的博客 182

php session数据存储位置选择

PHP session 数据的存储位置可以通过配置文件或者代码来进行设置。默认情况下,session 数据是存储在服务器的文件系统中的。你可以将 session 数据存储在其他地方,例如数据库、缓存等。

zgscwxd的博客 1028
上一篇: MySQL EXPLAIN详解
下一篇: MySQL 基础语句编写
dwf_学海无涯
博客等级 码龄10年 42粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值