2012-08-22 9 views
14

Tôi đang sử dụng trình viết mã làm khung.Phiên bị mất sau khi chuyển hướng trong Codeigniter

Trước tiên, tôi sử dụng localhost nhưng khi tôi thay đổi thành địa chỉ IP của mình chức năng đăng nhập không hoạt động nữa. Tôi thấy rằng phiên bị mất sau khi chuyển hướng đến bộ điều khiển khác.

Dưới đây là kết quả của print_r($this->session->all_userdata());

[session_id] => 7b00fa0f8790f48d24446f9eb4e6aab2 
[ip_address] => 10.42.68.71 
[user_agent] => Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1 
[last_activity] => 1285962398 
[user_data] => 

Như bạn có thể thấy nó không có bất kỳ dữ liệu truyền cho user_data nhưng nó đã được thiết lập trước khi chuyển hướng khi tôi kiểm tra.

Tôi tách bộ điều khiển thành hai bộ điều khiển đầu tiên là người dùng -> trình xử lý chức năng đăng nhập và một trình xử lý khác là trình xử lý của liên kết mà tôi chuyển hướng từ bộ điều khiển người dùng.

users.php (điều khiển đầu tiên):

$this->load->model('users_model'); 
$this->load->model('mymodel'); 
$this->load->database(); 

$email = $this->input->post('email'); 

$pass = $this->input->post('password'); 

$type = $this->input->post('type'); 

// Authenticate the user 
$userdata = $this->users_model->auth_user($email,$pass,$type); 

if($userdata) 
{ 
    $data = array('FIRSTNAME' => $userdata->FIRSTNAME, 
        'LASTNAME' => $userdata->LASTNAME, 
        'EMAIL' => $userdata->EMAIL, 
        'LOGIN' =>TRUE, 'TYPE' => $type); 
    $this->session->set_userdata($data); 
    redirect('planner/view_system','refresh'); 
} 

planner.php (bộ điều khiển thứ hai):

function __construct() { 
    parent::__construct(); 

    if (! ($this->session->userdata('LOGIN'))) 
    { 
     print_r (var_dump($this->session->userdata('FIRSTNAME'))); 
     print_r($this->session->all_userdata()); 
    } 
    $this->load->helper(array('form','html','url')); 

Và đây là cấu hình của tôi

$config['sess_cookie_name']  = 'ci_session'; 
$config['sess_expiration']  = 7200; 
$config['sess_expire_on_close'] = FALSE; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = FALSE; 
$config['sess_table_name']  = 'ci_sessions'; 
$config['sess_match_ip']  = TRUE; 
$config['sess_match_useragent'] = FALSE; 
$config['sess_time_to_update'] = 300; 
+1

thực hiện điều này xảy ra trên tất cả các trình duyệt? bạn đã thử truy cập các giá trị phiên từ các hàm khác sau đó hàm tạo? Có lỗi hoặc thông báo trong nhật ký lỗi của bạn không? –

+0

Tôi không chắc liệu điều này có hữu ích hay không, nhưng hãy thử thay đổi sess_use_database thành true? –

+0

Có điều này xảy ra với tất cả các trình duyệt. Tôi đã không truy cập giá trị từ chức năng khác, tôi trực tiếp chuyển hướng đến người lập kế hoạch. Không có lỗi. – Zatanna

Trả lời

2

Đầu tiên, bạn phải chắc chắn rằng có không có ký tự đặc biệt nào trong các mục phiên như '\ n' hoặc '\ v'. Những nhân vật đó có thể dẫn đến chuỗi của bạn bị phá vỡ ở giữa. Hãy thử trim() để được trợ giúp.

Nếu không sử dụng được, có thể đó là một số sự cố mã hóa. Cố gắng mã hóa mục phiên trước khi bạn cài đặt và giải mã nó khi bạn cần sử dụng nó.

0

Trong trường hợp của tôi, sau một số kiểm tra (với https và http trong localhost), lỗi xuất hiện cho vấn đề đó và không đặt đúng $ config ['cookie_secure'], vì vậy bạn có thể thử thay đổi trong config.php:

$config['cookie_secure'] = FALSE; // if is not under https, or true if you use https 

Chúc mừng!

1

tôi giải quyết vấn đề này bằng cách cấu hình $ config [ 'cookie_domain'] để localhost

$config['cookie_domain'] = "localhost"; 

tôi ban đầu có mà biến thiết lập tên miền để có đủ điều kiện như www.exampledomain.com nhưng khi đó tôi đã sử dụng một máy chủ cục bộ.

Tên miền mà tập lệnh của bạn đang chạy phải giống với tên miền được đặt trong $ config ['cookie_domain] để tránh lỗi không mong muốn với lớp phiên mã lệnh.

0

Từ kinh nghiệm của tôi, những vấn đề có thể là:

  1. một (hoặc nhiều hơn) các tập tin của bạn không phải là 'UTF-8 với BOM' (nếu trang web của bạn sẽ không chỉ có tiếng Anh và sử dụng UTF -8 như mã hóa như của tôi). Bạn phải thay đổi tất cả các tệp thành 'UTF-8 bằng BOM'. Notepad ++ sẽ giúp bạn.
  2. có một số ký tự trước thẻ php hoặc sau?> (Tốt hơn hết?> Ra). Vui lòng đảm bảo không có ký tự nào bao gồm dấu cách.
  3. Khi gọi localhost/xxxxxx làm địa chỉ, hãy đổi thành 127.0.0.1/xxxxxx hoặc IP mạng LAN của bạn
  4. Tôi luôn lưu trữ phiên trong DB thay vì tệp (dễ gỡ lỗi hơn).
1

Tôi có vấn đề tương tự, và nó bật vấn đề mà là rất phổ biến những ...

gốc rễ của cái ác của các vấn đề của tôi là những tên có chứa các ký tự "_"

dụ, trước là

$this->session->set_flashdata('message_success', 'some message'); 

sau khi trở thành

$this->session->set_flashdata('messagesuccess', 'some message'); 

Sự cố của tôi đã được giải quyết Cảm ơn người đàn ông có tài nguyên này http://biostall.com/losing-codeigniter-sessions/

0

Cùng một vấn đề với tôi.

Vui lòng kiểm tra xem bạn có tải thư viện phiên trong bộ điều khiển không.

$this->load->library('session'); 
0

Vui lòng kiểm tra các liên kết của bạn và đảm bảo chúng được viết chính xác. Khi viết URL tuyệt đối, hãy đảm bảo bạn thêm phần 'www'. Đây là vấn đề trong trường hợp của tôi. Tôi hi vọng điêu nay se giup được ai đo.


Tốt: header ("Location: http://www.yourdomain.com/controller/page");


Bad (phá vỡ phiên của bạn): header ("Location: http://yourdomain.com/controller/page");

-1

Phiên bị mất sau khi chuyển hướng trong Codeigniter

Tôi cũng đã tìm thấy sự cố.

Bạn vẫn gặp sự cố. Vui lòng lưu ý hướng của người viết mã. Khi trình duyệt của bạn truy cập vào trang web của bạn và làm mới một vài lần, người viết mã đã tạo ra nhiều tệp phiên theo hướng phiên của trình mã hóa.

Bạn tải lại phiên thư viện tải trên tệp bộ điều khiển của mình.

Vui lòng tham khảo cài đặt config.php sau.

enter image description here

Khi bạn thay đổi về việc thiết lập, hãy loại bỏ hoặc xóa tất cả dữ liệu ẩn của trình duyệt của bạn và tất cả các tập tin phiên họp của CodeIgniter. Sau đó, bạn cố gắng làm lại. Nó có thể sửa chữa vấn đề.

Nếu bạn vẫn không thể khắc phục được sự cố. Bạn có thể tải xuống gói codeigniter từ codeigniter.org một lần nữa và sau đó giải nén gói cho môi trường thử nghiệm.

0

Tôi đã bị sốc khi lần đầu tiên gặp sự cố này. Điều đó xảy ra với tôi vì dữ liệu phiên của tôi có dấu @.

Giải pháp là mã hóa dữ liệu đơn giản bằng cách sử dụng base64_encode.

Ví dụ:

$Data = urlencode( base64_encode($Email)); 
$this->session->set_userdata('Data', $Data); 

Và để tái sử dụng nó, chỉ cần làm điều này:

$Data = base64_decode(urldecode($this->session->userdata('Data'))); 

Hope this helps.

0

Bạn nên thêm một thứ vào tệp autoload.php của mình.

$autoload['libraries'] = array('database','session');

này sẽ giải quyết phiên tái định hướng vấn đề của bạn