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. dp + 状态压缩 - Codeforces 580D Kefa and Dishes

    Kefa and Dishes Problem's Link Mean: 菜单上有n道菜,需要点m道.每道菜的美味值为ai. 有k个规则,每个规则:在吃完第xi道菜后接着吃yi可以多获得vi的美味值. ...

  2. 第二百五十七节,Tornado框架-路由映射,逻辑处理,文件归类配置

    Tornado框架-路由映射,逻辑处理,文件归类配置 Tornado框架 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起 ...

  3. fzu 1330:Center of Gravity(计算几何,求扇形重心)

    Problem 1330 Center of Gravity Accept: 443    Submit: 830Time Limit: 1000 mSec    Memory Limit : 327 ...

  4. ajax 请求登录超时跳转登录页的示例代码

    Ajax AJAX即“Asynchronous Javascript + XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. 在Filter里判断是否登录,如果未 ...

  5. hdu 3760(2次bfs求最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3760 思路:首先是建反图,从点n开始做spfa求出n到各点的最短路,然后从1点开始搜最小序列,对于边( ...

  6. JavaScript 事件循环 — event loop

    引言 相信所有学过 JavaScript 都知道它是一门单线程的语言,这也就意味着 JS 无法进行多线程编程,但是 JS 当中却有着无处不在的异步概念 .在初期许多人会把异步理解成类似多线程的编程模式 ...

  7. 从头认识java-18.2 主要的线程机制(2)-Executors的使用

    在前面的章节我们都是直接对Thread进行管理,我们这里解释一下还有一个管理Thread的类Executors. 1.样例: package com.ray.ch17; import java.uti ...

  8. Gradle 模板配置

    对于新手配置Gradle是一件很痛苦的事,记住二句话绝对搞定 1.在Gradle-->gradle-wrapper.properties中配置distributionUrl=https\://s ...

  9. WCF:并发处理

    当多个线程同时访问相同的资源的时候就会产生并发,WCF缺省情况下会保护并发访问.对并发访问需要恰当处理,控制不好不仅会大大降低WCF服务的吞吐量和性能,而且还有可能会导致WCF服务的死锁.一.WCF并 ...

  10. Android上几种Animation和多个动画同时播放以ScaleAnimation应用详解

    在API Demo的View->Animation下可以找到四个Animation的Demo,第一个3D Translate比较复杂,最后再讲,先讲第2个Interpolator.该Activi ...