用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6224|回复: 4
收起左侧

【教学】多控制器中 session 的使用。

  [复制链接]
发表于 2009-2-27 11:01:43 | 显示全部楼层 |阅读模式
本帖最后由 pat 于 2009-3-20 17:20 编辑

QQ高级群:5898732
中文网站:http://www.bsdcn.com
出处:http://bsdcn.com/forumdisplay.php?fid=2


在登录的控制器(login/index)中实例一个session,登录成功后肯定要跳到别的页面,比如post/add,这个页面如何使用session呢?

也就是一个控制器如何调用另一个控制器中的一个实例。如果不行肯定要有一个在这两个控制器之前的一个控制器,然后在里面添加一个$session,那应该怎么做呢?  解答: Session是单例的,也就是对一个用户访问一个系统时,相当于全局的。 $this->session = Session::instance();上面的一行代码有两个作用: Session 库会通过 $this→session 激活。如果当前任何的 session 数据存在,它就会激活。如果没有 session 数据存在,则会自动创建一个新的 session。 我在测试的时候发现,如果首次不设置一个值,session就不会建立。如果设置了,就会建立,另一个页面在调用的时候,就会自动使用已经存在的id第一个控制器:   

PHP复制代码
$this->session = Session::instance();
    $this->session->set(array('fish' => 5, 'foo' => 'bar'));
    echo '当前 session ID: ' . $this->session->id();
    echo $this->session->get('fish');
    echo "<a href=/testbook/>aaa</a>";
    echo '<p style="color:green">Good answer!</p>';
    echo 'Form validated and submitted correctly. <br />';  
复制代码



第二个控制器:
PHP复制代码
<?php
class Testbook_Controller extends Controller
{
function index()
{
    $this->session = Session::instance();
   
    echo '当前 session ID: ' . $this->session->id();
    echo '<br />';
    echo $this->session->get('fish'); }
}  
复制代码


补充,icyleaf提示说也可以继承一个controller,具体请参见:http://source.kohanaphp.com/bran ... rollers/website.php

评分

参与人数 1威望 +5 收起 理由
Hex + 5 精品文章

查看全部评分

发表于 2009-2-27 12:17:16 | 显示全部楼层
加精!!
发表于 2009-3-19 10:33:11 | 显示全部楼层
kohana 的技术文档,记号一下
发表于 2009-4-1 00:29:46 | 显示全部楼层
在KO3版本,我做法是创建两个继承自Controller_Core的类,一个是需进行登录检验Verify_Controller,一个匿名即可访问Anony_Controller。其它的控制器根据需要继承自这两个类;而KO2,我将其实现于MY_Controller.php中:
PHP复制代码
public function __construct($not_verify_redirect = FALSE)
    {
        parent::__construct();
        //~ $rbac = new Rbac_Model;
        $this->session = Session::instance();
        //authentication goes here for example
        if($not_verify_redirect == TRUE)
        {
            self::$auth_user = $this->session->get('auth_user');
            if(self::$auth_user == FALSE
                and 'signin' != Router::$method
                and 'signup' != Router::$method)
            {
                url::redirect(url::site().'../account/signin');
            }
        }
    }
复制代码


这也避免在每个Controller里写一遍$this->session = Session::instance();
发表于 2010-2-18 00:03:20 | 显示全部楼层
收藏!!!谢谢

本版积分规则