2012-08-01 21 views
0

我试图将一个论坛(在Codeigniter中创建)到一个网站(简单的PHP >>>没有框架使用)。

为了自动登录论坛,当我在我的网站登录时,我需要使用论坛的功能,它需要2个参数$ username和$ password。

我已经在我的网站上有$ _SESSION这个信息(用户名和密码)。

如何从论坛读取$ _SESSION(正如我之前所说的基于Codeigniter的),因为我没有权限。

是否有可能性定义2个常量,在论坛的核心/配置中的某个地方,从$ _SESSION中保存这些细节,以便从论坛内的任何位置访问?

我知道CI的会话与$ _SESSION不同,所以请帮助我更实际一些,以解决我的问题。

谢谢。

+1

是否CI现场秋天的cookie保存会话标识符的范围之内的位置? AFAIK CI会话与PHP会话是分开的,因此您应该可以在CI页面中安全地调用'session_start()',它可以像其他地方一样工作。 – DaveRandom 2012-08-01 15:44:29

+0

Yeap,这对我来说是正确的答案:)我总是有这个问题,因为我使用自动加载这些类的框架工作:(谢谢+1 +1 – mgm 2012-08-01 15:54:00

回答

1

阅读本网址; -

http://codeigniter.com/forums/viewthread/158923/#766011

http://codeigniter.com/forums/viewthread/188648/#892137

如果谁想要做2.0.2

本地会话就在native_session.php文件复制到您的应用程序/库/并将其重命名为Session.php

然后更改类名称和构造函数名称到CI_Session

还添加以下,那么它应该工作正常。

function sess_destroy() 
{ 
    $this->destroy(); 
} 

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

/* 
    Native/Database hybrid 
    Code Igniter 
    Citrusmedia - Matthew Lymer 
*/ 


class CI_Session 
{ 
    var $sess_table_name   = ''; 
    var $sess_expiration   = 7200; 
    var $sess_match_ip    = FALSE; 
    var $sess_match_useragent  = TRUE; 
    var $sess_time_to_update  = 300; 
    var $encryption_key    = ''; 
    var $flashdata_key     = 'flash'; 
    var $time_reference    = 'time'; 
    var $gc_probability    = 5; 
    var $userdata     = array(); 
    var $CI; 
    var $now; 

    /** 
    * Session Constructor 
    * 
    * The constructor runs the session routines automatically 
    * whenever the class is instantiated. 
    */ 
    function CI_Session($params = array()) 
    {     
     log_message('debug', "Session Class Initialized"); 

     // Set the super object to a local variable for use throughout the class 
     $this->CI =& get_instance(); 

     // Set all the session preferences, which can either be set 
     // manually via the $params array above or via the config file 
     foreach (array('sess_table_name', 'sess_expiration', 'sess_match_ip', 'sess_match_useragent', 'sess_time_to_update', 'time_reference', 'encryption_key') as $key) 
     { 
      $this->$key = (isset($params[$key])) ? $params[$key] : $this->CI->config->item($key); 
     } 

     // Sessions, start your engines! 
     ini_set("session.gc_maxlifetime", $this->sess_expiration); 
     session_start(); 

     // Load the string helper so we can use the strip_slashes() function 
     $this->CI->load->helper('string'); 

     // Are we using a database? If so, load it 
     if(!$this->sess_table_name) { 
      die('Session class database table name not configured'); 
     } 

     $this->CI->load->database(); 

     // Set the "now" time. Can either be GMT or server time, based on the 
     // config prefs. We use this to set the "last activity" time 
     $this->now = $this->_get_time(); 

     // Set the session length. If the session expiration is 
     // set to zero we'll set the expiration two years from now. 
     if ($this->sess_expiration == 0) 
     { 
      $this->sess_expiration = (60*60*24*365*2); 
     } 

     // Run the Session routine. If a session doesn't exist we'll 
     // create a new one. If it does, we'll update it. 
     if (! $this->sess_read()) 
     { 
      $this->sess_create(); 
     } 
     else 
     { 
      $this->sess_update(); 
     } 

     // Delete 'old' flashdata (from last request) 
      $this->_flashdata_sweep(); 

     // Mark all new flashdata as old (data will be deleted before next request) 
      $this->_flashdata_mark(); 

     // Delete expired sessions if necessary 
     $this->_sess_gc(); 

     log_message('debug', "Session routines successfully run"); 
    } 

    // -------------------------------------------------------------------- 

    /** 
    * Fetch the current session data if it exists 
    * 
    * @access public 
    * @return bool 
    */ 
    function sess_read() 
    { 
     // Unserialize the session array 
     // $session = $this->_unserialize($session); 

     $session = array(); 

     foreach(array('session_id', 'ip_address', 'user_agent', 'last_activity') as $key) 
     { 
      if(!isset($_SESSION[$key])) { 
       $this->sess_destroy(); 
       return FALSE; 
      } 

      $session[$key] = $_SESSION[$key]; 
     }  

     // Is the session current? 
     if (($session['last_activity'] + $this->sess_expiration) < $this->now) 
     { 
      $this->sess_destroy(); 
      return FALSE; 
     } 

     // Does the IP Match? 
     if ($this->sess_match_ip == TRUE AND $session['ip_address'] != $this->CI->input->ip_address()) 
     { 
      $this->sess_destroy(); 
      return FALSE; 
     } 

     // Does the User Agent Match? 
     if ($this->sess_match_useragent == TRUE AND trim($session['user_agent']) != trim(substr($this->CI->input->user_agent(), 0, 50))) 
     { 
      $this->sess_destroy(); 
      return FALSE; 
     } 

     $this->CI->db->where('session_id', $session['session_id']); 

     if ($this->sess_match_ip == TRUE) 
     { 
      $this->CI->db->where('ip_address', $session['ip_address']); 
     } 

     if ($this->sess_match_useragent == TRUE) 
     { 
      $this->CI->db->where('user_agent', $session['user_agent']); 
     } 

     $query = $this->CI->db->get($this->sess_table_name); 
+1

'注意:Session类不使用本机PHP会话.' – DaveRandom 2012-08-01 15:49:14

+1

如果你想$ _SESSION变量,那么你想session_start();在认证文件 – 2012-08-01 15:52:30

+0

正如我已经在我的消息中写道:“我知道CI的会议是从$ _SESSION不同,所以请帮助我更实际的东西,在为了解决我的问题。“ – mgm 2012-08-01 15:52:38