2015-12-21 57 views
0

笨3会话表如下所示笨3由ID获取特定的会话数据

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    `id` varchar(40) NOT NULL, 
    `ip_address` varchar(45) NOT NULL, 
    `timestamp` int(10) unsigned DEFAULT 0 NOT NULL, 
    `data` blob NOT NULL, 
    KEY `ci_sessions_timestamp` (`timestamp`) 
); 

我可以

$this->session 

但进入我当前的会话。如果我想访问具体会议我将如何做到这一点。

我能得到像

$this->db->where('id', 'db256c0b82f8b6ba1e857d807ea613792817157a'); 
    $res = $this->db->get('ci_sessions'); 
    echo $res->row()->data; 

的会议上,我得到以下

__ci_last_regenerate|i:1450694483;email|s:18:"[email protected]";user_code|s:7:"AAA1787";loginInId|i:8;users_id|s:11:"00000000002";active|s:1:"1";username|s:13:"amzadmojumder";fname|s:5:"Amzad";lname|s:8:"Mojumder";phone|s:11:"07900642131";title|s:1:"#";created_on|s:19:"2015-12-17 16:31:56";last_login|s:19:"0000-00-00 00:00:00";in_group|s:15:"2,1,3,4,5,6,7,8"; 

我怎能将它转换为一个PHP对象或数组?我试图

unserialize($res->row()->data); 

也试过

session_decode($res->row()->data); 

这些都不奏效。任何帮助将不胜感激。

+0

我认为你需要编辑session.php填满会话的地方。 –

+0

你是如何将数据放入第一个表格的? – Ukuser32

回答

0

首先,笨会话表应该多一点这样的:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL, 
    ip_address varchar(45) DEFAULT '0' NOT NULL, 
    user_agent varchar(120) NOT NULL, 
    last_activity int(10) unsigned DEFAULT 0 NOT NULL, 
    user_data text NOT NULL, 
PRIMARY KEY (session_id), 
KEY `last_activity_idx` (`last_activity`) 
); 

您还需要编辑您的config.php文件,以确保正确设置CI会话使用表如下用于存储

$config['sess_use_database'] = TRUE; 
$config['sess_table_name'] = 'ci_sessions'; 

您将面对的另一个问题是您没有真正使用会话应该如何使用它们。如果你想通过管理员交换机或类似的东西来模仿另一个人的会话,你可能最好创建一个新的会话并复制表中的信息。如果您确实假定了会话,那么您有可能会破坏该会话或在其他用户访问该会话时使其失效。所以,我会写你自己的分析功能的数据库复制的特定会话,就像这样:

您的会话数据在您的分贝打破了这样的:

__ci_last_regenerate|i:1450694483; 
email|s:18:"[email protected]"; 
user_code|s:7:"AAA1787"; 
loginInId|i:8; 
users_id|s:11:"00000000002"; 
active|s:1:"1"; 
username|s:13:"amzadmojumder"; 
fname|s:5:"Amzad"; 
lname|s:8:"Mojumder"; 
phone|s:11:"07900642131"; 
title|s:1:"#"; 
created_on|s:19:"2015-12-17 16:31:56"; 
last_login|s:19:"0000-00-00 00:00:00"; 
in_group|s:15:"2,1,3,4,5,6,7,8"; 

的基本架构是这样的:

{session_key}|{information type s=string, i=int}:{length}:"{value}"; 

因此,我们可以从数据库中抓住它,并通过解析

<?php 

duplicateSession($id_to_duplicate) { 
    // Kill any current sessions we're in to prevent conflicts 
    $this->session->sess_destroy(); 

    // Get the Session we want to duplicate 
    $this->db->where('id', $id_to_duplicate); 
    $session = $this->db->get('ci_sessions'); 
    $data = $session->row()->data; 

    // Turn our data into an array so we can parse through it 
    $data_arr = explode(';', $data); 

    // Loop through each of our items to parse it out 
    foreach($data_arr as $session_key) { 
     // Explode out to separate our key name from our values 
     $session_key_arr = explode('|', $session_key); 
     $key_index = $session_key_arr[0]; 

     // Explode out to parse our values 
     $session_value_arr = explode(':', $session_key_arr[1]); 
     $key_value = $session_value_arr[2]; 

     // Build our new session index 
     $this->session->set_userdata($key_index, $key_value); 
    }  
} 

?> 
+0

此解决方案适用于codeigniter 2.问题是** codeigniter 3 **。还是要谢谢你的帮助。 – m82amjad

+0

dB的解析仍然适用于您,因为它是过程式PHP。 –