0

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

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

我已经从我的网站 $_SESSION 中获得了这些信息(用户名和密码)。

我如何从论坛中读取 $_SESSION(正如我在基于 Codeigniter 之前所说的那样),因为我无法访问它。

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

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

谢谢。

4

1 回答 1

1

阅读此网址;-

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

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

以防那些想要使用 2.0.2 进行本地会话的人

只需将 native_session.php 文件复制到您的 application/libraries/ 并将其重命名为 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);
于 2012-08-01T15:46:59.420 回答