1

我正在使用 flashdata 存储我的搜索查询,以便在用户导航到下一页时检索它。

这就是我存储闪存数据的方式

$this->session->set_flashdata('searchQuery', $queryStr);

这就是我检索闪存数据的方式。

$queryStr = $this->session->flashdata('searchQuery');

Flashdata 在本地运行良好,但是当我将它托管在我的服务器上时,它不能在 Chrome(Windows) 和 Chrome(Android) 上运行,但可以在 IE(Windows) 上运行。它在 Chrome(iOS) 上也可以正常工作。我也做了一个测试用例,它只适用于 IE(Windows) 和 Chrome(iOS)。有谁知道怎么了?

class Flashdata extends MY_Controller {
    function __construct()
    {
        parent::__construct();

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

    function index()
    {
        if ($var = $this->session->flashdata('test'))
        {
            echo "Found data: $var";
        }
        else
        {
            $this->session->set_flashdata('test', 'flash data test');
            echo "Set data";
        }
    }
}

这是我的 .htaccess 文件

# Options
Options -Multiviews
Options +FollowSymLinks

#Enable mod rewrite
RewriteEngine On
#the location of the root of your site
#if writing for subdirectories, you would enter /subdirectory
RewriteBase /

#Removes access to CodeIgniter system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#'system' can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#This last condition enables access to the images and css
#folders, and the robots.txt file
RewriteCond $1 !^(index\.php|images|robots\.txt|css)

RewriteRule ^(.*)$ index.php?/$1 [L]   
4

1 回答 1

3

该问题很可能是由您的最后一个问题引起RewriteCond.htaccess

#This last condition enables access to the images and css
#folders, and the robots.txt file
RewriteCond $1 !^(index\.php|images|robots\.txt|css)

以上用于列出不应路由到您的应用程序 index.php 的请求。

可能发生的情况是您的站点包含对您不希望路由到应用程序的图标/css/图像/等的请求。由于此请求正在通过您的应用程序,因此它正在拦截您的 flashdata(仅可用于下一个请求),这意味着它对您对该页面的实际请求不可用。

这方面的一个例子通常是 a favicon.ico,尽管还有其他情况。我认为 Chrome 会请求一个网站图标,即使<head>.

favicon.ico您可以通过将 添加到排除请求列表来解决此问题:

RewriteCond $1 !^(favicon\.ico|index\.php|images|robots\.txt|css)

这可能不是由 favicon.ico 引起的,而是另一个完全不同的请求。了解这一点的最佳方法是将所有请求记录到文件中,并检查代码中该点发生的情况。

于 2013-10-30T01:57:57.193 回答