解析php框架codeigniter中如何使用框架的session

解析php框架codeigniter中如何使用框架的session,第1张

里面有两种session的使用方法:
1是php的原始的session使用方法,这个很简单,$_SESSION['name']="name",然后在需要的地方显示:echo $_SESSION['name'];
2是codeigniter这个框架的一个方法:
下面就详细讲解如何使用这个有点点复杂的方法:
首先,在\ci\application\config下面的configphp文件中找到:$config['encryption_key'] = '';这个里面随便填什么值都可以,但是不能为空。一般是英文啊,不要钻牛角尖。
接着在\ci\application\config下面的autophp文件中找到:$autoload['libraries'] = array('');里面要填写:$autoload['libraries'] = array('session');或者在适当的地方如control文件夹里面的相应文件中(一般是在构造方法中)写:$this->load->library('session');这样也行。
现在环境配置好了,现在就是写代码了:
在需要放入session的地方写:
$this->session->set_userdata('name','yang');
这样session里面就有了值了。
显示值:
echo $this->session->userdata('name');
如果是array,则:
$newdata = array(
'username' => 'johndoe',
'email' =>
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
以下是转载的别人的详细的有点废话的相关知识:
Sessions会在每个页面载入后开始运行,所以session类必须首先被初始化。
1、您可以在控制器中初始化,也可以在系统中自动加载(译者注:在autoloadphp设定)$autoload['libraries'] = array('session');
2、要在您的控制器构造函数中初始化session类,您可以使用 $this->load->library 函数:$this->load->library('session');一旦被载入, session就可以这样使用: $this->session。
session类的绝大部分都会在后台运行,所以初始化session时,它session数据会被自动读取、创建和更新。

1sessionsave_handler = files
1 session_start()
1 session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,
PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是根据phpini的配置决定的,
但是有的系统是 sessiongc_probability = 0,这也就是说概率是0,而是通过cron脚本来实现垃圾回收。
sessiongc_probability = 1
sessiongc_divisor = 1000
sessiongc_maxlifetime = 1440//过期时间 默认24分钟
//概率是 sessiongc_probability/sessiongc_divisor 结果 1/1000,
//不建议设置过小,因为session的垃圾回收,是需要检查每个文件是否过期的。
sessionsave_path = //好像不同的系统默认不一样,有一种设置是 "N;/path"
//这是随机分级存储,这个样的话,垃圾回收将不起作用,需要自己写脚本
2 session会判断当前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE键值,
这个值可以从phpini找到
sessionname = PHPSESSID //默认值PHPSESSID
3 如果不存在会生成一个session_id,然后把生成的session_id作为COOKIE的值传递到客户端
相当于执行了下面COOKIE *** 作,注意的是,这一步执行了setcookie() *** 作,COOKIE是在header头中发送的,
这之前是不能有输出的,PHP有另外一个函数 session_regenerate_id() 如果使用这个函数,这之前也是不能有输出的。
setcookie(session_name(),
session_id(),
sessioncookie_lifetime,//默认0
sessioncookie_path,//默认'/'当前程序跟目录下都有效
sessioncookie_domain,//默认为空
)
4 如果存在那么session_id = $_COOKIE[session_name];
然后去sessionsave_path指定的文件夹里去找名字为'SESS_' session_id()的文件
读取文件的内容反序列化,然后放到$_SESSION中
2 为$_SESSION赋值
比如新添加一个值$_SESSION['test'] = 'blah'; 那么这个$_SESSION只会维护在内存中,当脚本执行结束的时候,
用把$_SESSION的值写入到session_id指定的文件夹中,然后关闭相关资源 这个阶段有可能执行更改session_id的 *** 作,
比如销毁一个旧的的session_id,生成一个全新的session_id一半用在自定义 session *** 作,角色的转换上,
比如DrupalDrupal的匿名用户有一个SESSION的,当它登录后需要换用新的session_id
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');//旧session cookie过期
}
session_regenerate_id();//这一步会生成新的session_id
//session_id()返回的是新的值
3写入SESSION *** 作
在脚本结束的时候会执行SESSION写入 *** 作,把$_SESSION中值写入到session_id命名的文件中,可能已经存在,
可能需要创建新的文件。
4 销毁SESSION
SESSION发出去的COOKIE一般属于即时COOKIE,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期,
比如 退出登录,而不是关闭浏览器,那么就需要在代码里销毁SESSION,方法有很多,
o 1 setcookie(session_name(), session_id(), time() - 8000000, );//退出登录前执行
o 2 usset($_SESSION);//这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据。
o 3 session_destroy();//这个作用更彻底,删除$_SESSION 删除session文件,和session_id
当不关闭浏览器的情况下,再次刷新,2和3都会有COOKIE传过来,但是找不到数据
2sessionsave_handler = user
用户自定义session处理机制,更加直观
session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');
1session_start(),
执行open($save_path, $session_name)打开session *** 作句柄
$save_path 在sessionsave_handler = files的情况下它就是sessionsave_path,
但是如果用户自定的话,这个两个参数都用不上,直接返回TRUE
执行read($id)从中读取数据//这个参数是自动传递的就是session_id(),可以通过这个值进行 *** 作。
2脚本执行结束
执行write($id, $sess_data) //两个参数,很简单
3假如用户需要session_destroy()
先执行destroy在执行第2步
一个实际例子:
//SESSION初始化的时候调用
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)
{
echo "sdfsf";
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) {
if (filemtime($filename) + $maxlifetime < time()) {
@unlink($filename);
}
}
return true;
}

首先说句题外话:除了用户名和密码,尽量不要用session,因为庞大的session会大大的增加服务器压力(session保存在服务器上),而一般的东西,跟安全性没关的,用cookie,cookie保存在服务端,且cookie可以设置失效的周期。
下面正式回答你的问题:如果必须保存在session中,我常用2个方法:
方法一:如果可以通过某个事件判断此session已经无用了,则将此session变量赋值NULL,则此session销毁
方法二:数据库中创建一个存放session的表,记录每一个session变量的创建事件,每隔多久判断session变量创建的时间距离现在多久则领该session变量=NULL,则可销毁(此方法有点类似社区计算当前在线人数)

$_SESSION["参数"]=value; 举个例子: 你打算把登陆用户的信息,我们这里用$info来代替所有信息,也就是要加入到session中的内容,这里$_SESSION["参数"]里面的参数是可以自定义的,我们自力亦用info,那么放入session就是:$_SESSION[info]

首先需要开启session,然后往session里面存储数据,可以是任何类型数据。比如:

<php

session-start();

$a=array(1,2,3,4,5,"john","ok");

$_SESION['n']=$a;

print_r($_SESION['n']);

>

Session直接翻译为中文比较困难,一般都会译成时域。在计算机的专业术语中,Session是指一个终端用户与交互系统之间进行通信的时间间隔,通常指从注册进入系统并且到注销退出系统之间所经过的时间。以及如果需要的话,可能还有一定 *** 作空间。

具体到Web中的Session指的是用户在浏览某个网站时,从进入网站开始到关闭浏览器所经过的这段时间,也就是用户浏览此网站所花费的时间。因此从上述的定义中我们就可以看到,Session实际上是一个特定时间概念。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12736950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存