我正在使用带有2个控制器的CI框架构建网络应用程序'仪表板'和仪表板控制器中的'项目',我有用于获取项目列表的脚本:
(仪表板控制器)
class Dashboard extends MY_Controller {
function __contruct()
{
parent::__contruct()
$project_id = array('projectid' = '');
// remove project id session userdata
$this->session->unset_userdata($project_id);
}
function index()
{
$this->load->model("content_model");
// getting project list
$this->data['projects'] = $this->content_model->get_content();
// rendering view
$this->_render_page('dashboard/index', $this->data);
}
}
(仪表板索引视图)
<html>
<?php foreach ($projects as $project):?>
<?php echo anchor("projects/index/".$project->id, 'Project', 'title="List Project"');?>
<?php endforeach;?>
</html>
上面的脚本将生成一个指向我的项目控制器的链接,如下所示:
<a href="http://me.com/projects/index/1" title="List Project">Project</a>
<a href="http://me.com/projects/index/2" title="List Project">Project</a>
<a href="http://me.com/projects/index/3" title="List Project">Project</a>
上面链接中的数字1,2,3 ..等等是项目的ID,所以在第二个控制器(我称之为项目控制器)中,我将这个id设置为session userdata:
(项目管理员)
class Projects extends MY_Controller {
function __construct()
{
parent::__construct();
$this->load->model("project_model");
}
function index($projectid = NULL)
{
// checking for id
if ($projectid !== null && !is_numeric($projectid))
{
header("refresh:4;url=".base_url('dashboard'));
return show_404();
}
// set project ids to session userdata
$ses = array('projectid' => $projectid);
$this->session->set_userdata($ses);
// querying get data of project
$this->project_model->data_project($projectid);
}
// add goods to project
function add_goods()
{
// get project id from session
$projectid = $this->session->userdata('projectid');
// get input form value
$form_data = array(
'name' => $this->input->post('name'),
'qty' => $this->input->post('qty'),
'note' => $this->input->post('note'),
);
// querying save goods to related project
$this->project_model->add_goods_project($projectid, $form_data);
// redirect
redirect('projects/goods', 'refresh');
}
// remove goods from project
function remove_goods($goodid=false)
{
// get project id from session
$projectid = $this->session->userdata('projectid');
// querying remove goods from related project
$this->project_model->remove_goods_project($projectid, $goodid);
// redirect
redirect('projects/goods', 'refresh');
}
}
将项目ID设置为会话用户数据后,我很容易从数据库中查询与数据相关的项目。
// get project id from session
$projectid = $this->session->userdata('projectid');
// querying save goods to related project
$this->project_model->add_goods_project($projectid, $form_data);
// querying remove goods from related project
$this->project_model->remove_goods_project($projectid, $goodid);
但毕竟我认为如果用户在不同的标签中打开多个项目链接,这种方法将无效,它将搞乱所有查询数据库。由于会话数据只有1个项目ID。
我需要有人建议我(建议)一个更好的方法,以便用户可以享受开放的多个项目吗?
由于
答案 0 :(得分:2)
使用基于cookie的会话管理,浏览器一次只能支持一个会话。这适用于绝大多数网站。要在一个浏览器中支持多个会话,您需要使用基于URL的会话管理,这非常棘手且容易出错。
您只需要正确配置它:
当使用无法发送cookie的客户端解决方案(p.e. swf)时,让它将session_id作为post变量发送。然后扩展会话库,以便在无法找到cookie时通过$ this-&gt; input-&gt; post()检查此变量,并使用它来加载会话。
希望这个想法有助于:-)