通过会话工厂sessionFactory创建session
openSession()和getCurrentSession()的区别
- 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的线程则不会
- 采用getCurrentSession()创建的session在commit()或rollback()时会自动关闭,而采用openSession()创建的session必须手动关闭
本文实例讲述了php使用MySQL保存session会话的方法。分享给大家供大家参考。具体分析如下:
在很多大的系统中一般都有这个功能,但是要分离出来分析,网上的资料也不太多 这里我整理了一篇发出来与大家分享
使用MySQL保存session会话较files有很多优点:
1) 有利于分布式系统,files只能保存在一台机器上
2) 有利于大访问量的系统,使用files时每个session保存在一个文件中,目录会超级大,查找session文件会比较困难。
使用MySQL保存会话首先要创建session表
$hostname_login = "localhost"; // Server address
$username_login = "root"; // User name
$password_login = ""; // Password
//
$data_name = "session"; // Database name
$login = mysql_pconnect($hostname_login, $username_login, $password_login) or trigger_error(mysql_error(),E_USER_ERROR);
$sql="SHOW DATABASES LIKE '".$data_name."'"; // If it is exist
if($rs_table=mysql_query($sql,$login)) {
if($rs_value=mysql_fetch_array($rs_table)) {
echo "数据库已经存在!\n!";
exit();
}
}
$sql="CREATE DATABASE $data_name";
mysql_query($sql); // Crate database
echo "数据库创建成功!\n";
mysql_select_db($data_name, $login);
$sql="CREATE TABLE `sessions` (
`SessionKey` varchar(32) NOT NULL default '',
`SessionArray` blob NOT NULL,
`SessionExpTime` int(20) unsigned NOT NULL default '0',
PRIMARY KEY (`SessionKey`),
KEY `SessionKey` (`SessionKey`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8"; //新建数据库 sql语句
mysql_query($sql);
echo "成功新建数据库表!";
?>
$hostname_login = "localhost"; // Server address
$username_login = "root"; // User name
$password_login = ""; // Password
//
$data_name = "session"; // Database name
$login = mysql_pconnect($hostname_login, $username_login, $password_login) or trigger_error(mysql_error(),E_USER_ERROR);
$sql="SHOW DATABASES LIKE '".$data_name."'"; // If it is exist
if($rs_table=mysql_query($sql,$login)) {
if($rs_value=mysql_fetch_array($rs_table)) {
echo "数据库已经存在!\n!";
exit();
}
}
$sql="CREATE DATABASE $data_name";
mysql_query($sql); // Crate database
echo "数据库创建成功!\n";
mysql_select_db($data_name, $login);
$sql="CREATE TABLE `sessions` (
`SessionKey` varchar(32) NOT NULL default '',
`SessionArray` blob NOT NULL,
`SessionExpTime` int(20) unsigned NOT NULL default '0',
PRIMARY KEY (`SessionKey`),
KEY `SessionKey` (`SessionKey`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8"; //新建数据库 sql语句
mysql_query($sql);
echo "成功新建数据库表!";
?>
session_module_name
(PHP 4, PHP 5)
session_module_name — 获取/设置会话模块名称
说明¶
string session_module_name ([ string $module ] )
session_module_name() 获取或设置会话模块名称。
参数¶
module
如果指定 module 参数,则使用 指定值作为会话模块。
返回值¶
返回当前所用的会话模块名称。
User Contributed Notes 3 notes
0
2 months ago
0
7 months ago
This function is used to set the Session Module at site or script level.
The global configuration can be done in php.ini under the [Session] section and with the name of "session.save_handler". The sessions are saved in files by default, like so:
session.save_handler = files
But with this configuration you set one of your websites to use some other session module (if you have them installed and extension loaded with PHP), like so:
// You'll need to define a save path also, if the module is other than files, like so:session_save_path('localhost:11211');// memcache uses port 11211
// or you can use multiple for load balancing:session_save_path('localhost:11211:41,otherhost:11211:60')// First part is hostname or path to socket, next is port and the last is the weight for that server
//The function also returns the value of the current session module.echosession_module_name();// will print memcache in our case
// or maybe a checkif(session_module_name() !='memcache'){// Do something, throw an exception maybe}
-3
1 year ago
session_start();$_SESSION['name']="Tushar";$n=$_SESSION['name'];$_SESSION['Age']="23";$_SESSION['city']="Tarapur";//echo session_encode()."
";//Prints all Session Data//echo session_is_registered($n);echosession_module_name();//it prints "files"?>
output:
files
通过会话工厂sessionFactory创建session
openSession()和getCurrentSession()的区别
- 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的线程则不会
- 采用getCurrentSession()创建的session在commit()或rollback()时会自动关闭,而采用openSession()创建的session必须手动关闭
转载于:https://www.cnblogs.com/lc0814/p/8384503.html
会话的创建
HttpSession对象提供了一个isNew()方法,使用该方法时应当小心。确定用
户是否以及拥有一个会话的最好的办法时获得当前会话。如果没有会话存在,那
么可以强迫用户登录。只有在成功登陆之后,才能创建一个新的会话对象。这个
顺序是一个好的实践,因为它能防止用户避开安全机制。
可以通过调用方法getSession(false)获得会话对象。如果用户没有会话,那么该方法返回null。然后,可以强迫用户在每次开始一个新会话之前进行登录。
在这种情况下,当getSesion(false)返回null时,将客户端浏览器重定向到web应
用程序的登录页面。如果用户已经有一个会话,或者getSession(false)方法返回
的值不是null,那么可以继续使用该会话。
HttpSession session = request.getSesion(false);
if (session == null){
response.sendRedirect("login.jsp");
}
你可能会试图执行一下操作:
HttpSession session = request.getSession(true);
if (sesion.isNew()){
response.sendRedirect("login.jsp");
}
不要这样做。
在该代码中,我们像往常一样请求会话对象。然而,因为我们在getSession()方法中将参数值设为了true,所以如果没有会话存在,那么服务器将创建一个新
会话。尽管该代码这样做似乎是正确的,但它实际上引入了一个安全性问题。一
些人可以通过重复请求url来创建大量会话对象。这些会话是作为内存堆积在每条
请求的服务器上的,因此,攻击者可以占用大量的服务器资源。最终,攻击者会
使服务器变得很不稳定。
SqlSessionFactoryBuilder:build方法创建SqlSessionFactory实例。
SqlSessionFactory:创建SqlSession实例的工厂。
SqlSession:用于执行持久化操作的对象,类似于jdbc中的Connection。
SqlSessionTemplate:MyBatis提供的持久层访问模板化的工具,线程安全,可通过构造参数或依赖注入SqlSessionFactory实例。
Hibernate是与MyBatis类似的orm框架,这里与Hibernate进行一下对比,Hibernate中对于connection的管理,是通过以下几个重要的类:
SessionFactory:创建Session实例的工厂,类似于MyBatis中的SqlSessionFactory。
Session:用来执行持久化操作的对象,类似于jdbc中的Connection。
HibernateTemplate:Hibernate提供的持久层访问模板化的工具,线程安全,可通过构造参数或依赖注入SessionFactory实例。