PHP关于Session的配置:

在php.ini中配置为:session.name = PHPSESSID
在请求开始的时候,会话名称会被重置并存储到session.name配置项。
所以要想在不改变php.ini配置文件的情况下,更改session_name 必须要在 session_start()或
session_register()之前设置session_name。
PHP代码:
<?php
session_name('PHPSESSID_NEW');
session_start();
echo session_name(); //输出为PHPSESSID_NEW
?>

 

session.save_path = ‘/leapsoulcn’;
注意事项:
1、一般为了保证服务器的安全,session.save_path值最好设置为外网无法访问的目录,另外如果你是在linux服务器下进行session配置,请务必同时配置此目录为可读写权限,否则在执行session操作时会报错。
2、在使用session变量时,为了保证服务器的安全性,最好将register_globals设置为off,以保证全局变量不混淆,在使用session_register()注册session变量时,你可以通过系统全局变量$_SESSION来访问,比如你注册了leapsoulcn变量,你可以通过$_SESSION['leapsoulcn']来访问此变量。
session.save_handler = ”files”
默认以文件方式存取session数据,如果想要使用自定义的处理器来存取session数据,比如数据库,用”user”。
session.use_cookies = 1
是否使用cookies在客户端保存会话sessionid,默认为采用cookies
session.use_only_cookies = 0
是否仅仅使用cookie在客户端保存会话sessionid,这个选项可以使管理员禁止用户通过URL来传递id,默认为0,如果禁用的话,客户端如果禁用Cookie将使session无法工作。
session.name = “PHPSESSID”
当做cookie name来使用的session标识名
session.auto_start = 0
是否自动启动session,默认不启动,我们知道在使用session功能时,我们基本上在每个php脚本头部都会通过session_start()函数来启动session,如果你启动这个选项,则在每个脚本头部都会自动启动session,不需要每个脚本头部都以session_start()函数启动session,推荐关闭这个选项,采用默认值。
session.cookie_lifetime = 0
传递sessionid的Cookie有效期(秒),0表示仅在浏览器打开期间有效。
session.gc_probability = 1
session.gc_divisor = 100
定义在每次初始化会话时,启动垃圾回收程序的概率。计算公式如下:session.gc_probability/session.gc_divisor,比如1/100,表示有1%的概率启动启动垃圾回收程序,对会话页面访问越频繁,概率就应当越小。建议值为1/1000~5000。
session.gc_maxlifetime = 1440
设定保存的session文件生存期,超过此参数设定秒数后,保存的数据将被视为’垃圾’并由垃圾回收程序清理。判断标准是最后访问数据的时间(对于FAT文件系统是最后刷新数据的时间)。如果多个脚本共享同一个session.save_path目录但session.gc_maxlifetime不同,将以所有session.gc_maxlifetime指令中的最小值为准。 如果你在session.save_path选项中设定使用子目录来存储session数据文件,垃圾回收程序不会自动启动,你必须使用自己编写的shell脚本、cron项或者其他办法来执行垃圾搜集。 比如设置”session.gc_maxlifetime=1440″ (24分钟):
cd /path/to/sessions; find -cmin +24 | xargs rm

  

Session存储mysql数据库:

sql代码:

CREATE TABLE sessions(
id CHAR(32) NOT NULL,
data TEXT,
last_accessed TIMESTAMP NOT NULL,
PRIMARY KEY(id)
);

php代码:

名称:session_mysql.class.php

class session_mysql {
private $sdbc = null; //数据库连接句柄
public function __construct() {
$this->sdbc = mysqli_connect('127.0.0.1', 'root', '', 'test'); //数据库
session_set_save_handler(array(&$this,'open_session'), array(&$this,'close_session'), array(&$this,'read_session'), array(&$this,'write_session'), array(&$this,'destroy_session'), array(&$this,'clean_session'));
ini_set("session.cookie_httponly", 1);
session_start();
}
//启动会话
function open_session()
{
return true;
} //关闭会话
function close_session()
{
return mysqli_close($this->sdbc);
} //读取会话数据
function read_session($sid)
{
$sql = sprintf("SELECT data FROM sessions WHERE id='%s'", mysqli_real_escape_string($this->sdbc, $sid));
$res = mysqli_query($this->sdbc, $sql);
if (mysqli_num_rows($res) == 1) {
list($data) = mysqli_fetch_array($res, MYSQLI_NUM);
return $data;
} else {
return '';
}
} //写入会话数据
function write_session($sid, $data)
{
$sql = sprintf("INSERT INTO sessions(id,data,last_accessed) VALUES('%s','%s','%s')", mysqli_real_escape_string($this->sdbc, $sid), mysqli_real_escape_string($this->sdbc, $data), date("Y-m-d H:i:s", time()));
$res = mysqli_query($this->sdbc, $sql);
if (!$res) {
return false;
}
return true;
} //销毁会话数据
function destroy_session($sid)
{
$sql = sprintf("DELETE FROM sessions WHERE id='%s'", mysqli_real_escape_string($this->sdbc, $sid));
$res = mysqli_query($this->sdbc, $sql);
$_SESSION = array();
if (!mysqli_affected_rows($this->sdbc) == 0) {
return false;
}
return true;
} //执行垃圾回收(删除旧的会话数据)
function clean_session($expire)
{
$sql = sprintf("DELETE FROM sessions WHERE DATE_ADD(last_accessed,INTERVAL %d SECOND)<NOW()", (int)$expire);
$res = mysqli_query($this->sdbc, $sql);
if (!$res) {
return false;
}
return true;
}
}

测试:

创建一个 set_session.php

<?php
include 'session_mysql.class.php';
new session_mysql();
$_SESSION['id']=9;
$_SESSION['name']='mracale';
echo 'success';

创建一个 get_session.php

<?php
include 'session_mysql.class.php';
new session_mysql();
var_dump($_SESSION);

测试步骤:先访问  set_session.php文件  然后看数据库中的数据是否存储了,然后访问 get_session.php查看数据

session存储到redis方式:

<?php
ini_set("session.save_handler", "redis");
ini_set("session.save_path", "tcp://192.168.138.161:6379");
session_start();
$_SESSION['class'] = array('name' => 'mraclae', 'num' => 8);
//连接redis
$redis = new redis();
$redis->connect('192.168.138.161', 6379);
$redis->auth('456852'); //密码验证
//检查session_id
echo 'session_id:' . session_id() . '<br/>';
//redis存入的session(redis用session_id作为key,以string的形式存储)
echo 'redis_session:' . $redis->get('PHPREDIS_SESSION:' . session_id()) . '<br/>';
//php获取session值
var_dump($_SESSION['class']);
?>

  

php about session store db or cache的更多相关文章

  1. DB,Cache和Redis应用场景分析

    最近做一产品,微博方面的.数据存储同时用到了DB(mysql),Cache(memcache),Redis.其实最开始架构设计的时候是准备用MongoDB的,由于学习成本太高,最终选择放弃了,采用了比 ...

  2. Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别

    2.8 Context 的使用Context 对象包含与当前页面相关的信息,提供对整个上下文的访问,包括请求.响应.以及上文中的Session 和Application 等信息.可以使用此对象在网页之 ...

  3. Application,Session,Cookie,ViewState和Cache区别

    在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...

  4. Session Store

    Session Store Configuration Session Usage Flash Data Session Drivers Configuration Since HTTP driven ...

  5. 在Apache Tomcat 7设置redis作为session store

    在Apache Tomcat 7设置redis作为session store  //输出tomcat控制台日志 root@ubuntu:~# cd /usr/tomcat/apache-tomcat- ...

  6. Session、Application、Cache

    [Asp.Net]状态管理(Session.Application.Cache) 上篇博文介绍了在客户端状态管理的两种方式:http://www.cnblogs.com/wolf-sun/p/3329 ...

  7. Asp.net 中ViewState,cookie,session,application,cache的比较

    Asp.net 中的状态管理维护包含ViewState,cookie,session,application,cache五种方式,以下是它们的一些比较: 1.存在于客户端还是服务端 客户端: view ...

  8. MongoDB实践-自定义ASP.NET Session Store

    Session由来 由于HTTP协议是无状态的,客户端与服务器端进行“请求-响应”操作后,建立的连接就释放了,服务器端根本不知道刚才是哪个客户端访问的.但是有些场景是需要知道客户端的状态的,最典型的就 ...

  9. No Spring Session store is configured: set the 'spring.session.store-type'

    发现session store type使用来存放session的存储方式,目前Spring boot中只支持Redis方式. 由于本应用暂无需将session放入redis的需求,故这里就可以将se ...

随机推荐

  1. Laravel 5.1 中创建自定义 Artisan 控制台命令实例教程

    1.入门 Laravel通过Artisan提供了强大的控制台命令来处理非浏览器业务逻辑.要查看Laravel中所有的Artisan命令,可以通过在项目根目录运行: php artisan list 对 ...

  2. 以下( )可用于检索session属性userid的值。

    A.session. getAttribute (“userid”); B.session. setAttribute (“userid”); C.request. getParameter (“us ...

  3. 【BZOJ】1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏(刷水严重)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1666 这种我就不说了.. #include <cstdio> #include < ...

  4. XAMPP phpmyadmin修改mysql密码

    我手动修改了mysql的root账户的密码,然后就访问不了phpmyadmin了. 解决方法: 打开xampp目录(默认的安装目录,如果修改,请找到xampp的安装目录),打开phpmyadmin的目 ...

  5. Mac终端运行java程序

    1.编辑源文件HelloWorld.java 2.编译源文件 javac HelloWorld.java 生成HelloWorld.class文件 3.执行java字节码 注意,一定要到源目录下,并且 ...

  6. JB开发之问题汇总 [jailbreak,越狱技术]

    1.升级到Mac 10.9.1,Xcode 升级到5出现的问题: 1)升级前要做的事情: ①升级/重新安装iOSOpenDev,在终端输入 xcode-select --switch (xcode_d ...

  7. 面试题思考:Java RMI与RPC,JMS的比较

    RPC:(Remote Procedure Call)  被设计为在应用程序间通信的平台中立的方式,它不理会操作系统之间以及语言之间的差异. 支持多语言 RMI:(Remote Method Invo ...

  8. 【BZOJ3195】[Jxoi2012]奇怪的道路 状压DP

    [BZOJ3195][Jxoi2012]奇怪的道路 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座 ...

  9. Vue.js_构造器及其实例化概念

    Vue构造器 1.Vue.js是一个构造函数,编程中称之为构造器 2.每一个new Vue() 都是一个Vue构造函数的实例,这个过程叫做实例化 3.构造函数需要将其实例化后才会启用 var vm = ...

  10. servlet容器与web容器的概念

    一般的说法是这样的,servlet容器的主要任务是管理servlet的生命周期.而web容器更准确的说应该叫web服务器,它是来管理和部署 web应用的.还有一种服务器叫做应用服务器,它的功能比web ...