修改CI3.0的session

本文详细介绍了CodeIgniter 3.0中Session配置的变化,包括存储方式的选择与配置,以及如何设置数据库表结构来支持不同的Session管理需求。

linux   apache 配了80,8080两个访问地址,两个后台的代码一致,所以session信息也一致,这样出现的一个问题就是:同一浏览器,登录一个,另一个刷新也会登录,session会同步。

解决办法是让两个的session的存放地址不一样,就可以分开了。

我们来看看2.0版本中的设置是什么样子的:

?
1
2
3
4
5
6
7
8
9
$config [ 'sess_cookie_name' ]=  'test_session' ;
$config [ 'sess_expiration' ]= 7200;
$config [ 'sess_expire_on_close' ]= FALSE;
$config [ 'sess_encrypt_cookie' ]= FALSE;
$config [ 'sess_use_database' ]= TRUE;
$config [ 'sess_table_name' ]=  'test_sessions' ;
$config [ 'sess_match_ip' ]= FALSE;
$config [ 'sess_match_useragent' ]= TRUE;
$config [ 'sess_time_to_update' ]= 3000;

而3.0是这样的:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

?

首先是第一个改动,CI3.0支持更多的方式去存储session,包括files, database, redis, memcached以及自定义。

所以你可以在sess_driver那里修改为自己所需的存储方式。

然后是第四行的改动,第四行在使用文件存储的时候应当指定文件路径(使用默认的null即可),而使用数据库存储时需要改为数据表的名称,使用redis的时候需要改为tcp地址,如

?
1
tcp: //localhost:6379

使用memcached也是一样要改为地址,如:

?
1
localhost:11211

如何使用呢?

首先在application\config\config.php中配置好,然后去数据库创建表(MYSQL):

【备注:3.0版本的session数据表与2.0版本相差较大,建议删除2.0的数据表换成新的数据表】

?
1
2
3
4
5
6
7
8
CREATE  TABLE  IF  NOT  EXISTS `ci_sessions` (
         `id`  varchar (40)  NOT  NULL ,
         `ip_address`  varchar (45)  NOT  NULL ,
         ` timestamp int (10) unsigned  DEFAULT  NOT  NULL ,
         `data` blob  NOT  NULL ,
         PRIMARY  KEY  (id),
         KEY  `ci_sessions_timestamp` (` timestamp `)
);

如果你想要打开sess_match_ip的话还需要执行下面的语句

?
1
ALTER  TABLE  ci_sessions  ADD  CONSTRAINT  ci_sessions_id_ip  UNIQUE  (id, ip_address);

这样配置就完成了,你可以使用2.0版本的方法进行调用。


<think>好的,用户现在的问题是想在CodeIgniter框架中实现条件搜索功能,询问具体的实现方法。我需要结合之前的对话历史和用户提供的引用内容来给出合适的回答。 首先,回顾之前的对话,用户之前询问过如何通过GET接口获取最后一行数据,我给出了分步解答,包括获取数据、分割行、异常处理等,并提供了Java和Python的示例。现在用户的问题转向了CodeIgniter的条件搜索,所以需要调整到PHP和CodeIgniter的上下文。 查看用户提供的引用内容,引用[1]提到了ThinkPHP的getlist方法实现数据搜索,引用[2]是关于CodeIgniter分页和多条件查询的配置,引用[3]讨论了多条件模糊查询的SQL语句和输入验证。这些引用虽然部分是关于ThinkPHP的,但关键点在于多条件查询的实现,特别是分页和条件拼接,以及输入处理,这些对CodeIgniter同样适用。 用户的需求是在CodeIgniter中实现条件搜索,可能需要包括表单处理、条件拼接、分页集成以及输入验证。根据引用[2]中的信息,CodeIgniter的分页配置需要处理多个GET参数,确保分页链接包含当前搜索条件。引用[3]提到了输入验证,当所有条件为空时需要提示用户,这点需要注意。 接下来,我需要构建一个分步的解决方案,可能包括以下几个步骤: 1. **表单提交与GET参数处理**:使用表单GET方法提交搜索条件,确保参数在URL中可见,便于分页和刷新后保留条件。 2. **模型层构建查询条件**:在模型中动态拼接查询条件,使用CodeIgniter的Active Record类,如$this->db->like()处理模糊查询,同时处理空值情况。 3. **分页配置集成搜索条件**:参考引用[2],在分页配置的base_url中加入当前搜索条件,确保分页链接包含这些参数,避免分页后条件丢失。 4. **视图层显示结果和分页链接**:在视图中循环显示查询结果,并输出分页链接,同时保留表单中的输入值以便用户修改。 5. **输入验证与空条件处理**:根据引用[3],当所有条件为空时,可能需要提示用户输入查询条件,或者显示所有记录,但需注意性能问题,可能需要添加判断。 可能的代码示例包括控制器中获取GET参数,模型中的条件拼接,分页库的配置,以及视图中的表单和结果展示。同时,需要注意SQL注入的防范,使用CodeIgniter的查询构建器可以自动转义,提高安全性。 还需要考虑如何将多个条件参数传递到分页配置中,确保每次分页请求都携带这些参数,这可以通过修改$config[&#39;suffix&#39;]和$config[&#39;first_url&#39;]来实现,如引用[2]中的示例所示。 另外,用户可能希望实现模糊查询,这时候需要使用LIKE语句,并且处理输入中的通配符,比如在查询条件两侧添加百分号,或者在代码中自动添加,如$keyword = "%{$keyword}%";。 最后,异常处理和用户体验方面,当没有结果时显示提示信息,或者在所有条件为空时给出提示,避免查询全部数据导致性能问题,这部分可以结合引用[3]的建议进行处理。 总结起来,步骤大致是表单提交处理参数,模型构建动态查询,分页集成参数,视图展示结果和分页链接,输入验证和空处理。需要将这些步骤用CodeIgniter的方式实现,并确保代码清晰、安全、高效。</think>### CodeIgniter条件搜索功能实现步骤 --- #### **1. 表单提交与参数接收** 通过GET方式提交搜索条件,确保参数可被分页组件复用: ```php <!-- 视图层示例:application/views/search_form.php --> <form method="get" action="<?= site_url(&#39;controller/search&#39;) ?>"> <input type="text" name="keyword" placeholder="关键词" value="<?= $this->input->get(&#39;keyword&#39;) ?>"> <select name="category"> <option value="">全部分类</option> <?php foreach ($categories as $cat): ?> <option value="<?= $cat[&#39;id&#39;] ?>" <?= $this->input->get(&#39;category&#39;) == $cat[&#39;id&#39;] ? &#39;selected&#39; : &#39;&#39; ?>> <?= $cat[&#39;name&#39;] ?> </option> <?php endforeach; ?> </select> <button type="submit">搜索</button> </form> ``` --- #### **2. 模型层构建动态查询** 使用CodeIgniter查询构造器动态拼接条件: ```php // 模型层示例:application/models/Search_model.php public function get_search_results($params) { $this->db->from(&#39;products&#39;); // 关键词模糊匹配(参考引用[3]多条件逻辑) if (!empty($params[&#39;keyword&#39;])) { $this->db->like(&#39;product_name&#39;, $params[&#39;keyword&#39;]); $this->db->or_like(&#39;description&#39;, $params[&#39;keyword&#39;]); } // 精确分类筛选 if (!empty($params[&#39;category&#39;])) { $this->db->where(&#39;category_id&#39;, $params[&#39;category&#39;]); } return $this->db->get()->result_array(); } ``` --- #### **3. 控制器处理逻辑** 整合表单参数、调用模型、配置分页: ```php // 控制器示例:application/controllers/Products.php public function search() { // 获取搜索参数 $keyword = $this->input->get(&#39;keyword&#39;); $category = $this->input->get(&#39;category&#39;); // 加载模型与分页库 $this->load->model(&#39;Search_model&#39;); $this->load->library(&#39;pagination&#39;); // 分页配置(关键点参考引用[2]参数传递) $config[&#39;base_url&#39;] = site_url(&#39;products/search?keyword=&#39;.$keyword.&#39;&category=&#39;.$category); $config[&#39;total_rows&#39;] = $this->Search_model->count_search_results($_GET); $config[&#39;per_page&#39;] = 10; $this->pagination->initialize($config); // 获取当前页数据 $data[&#39;results&#39;] = $this->Search_model->get_search_results( array_merge($_GET, [&#39;limit&#39; => $config[&#39;per_page&#39;], &#39;offset&#39; => $this->input->get(&#39;page&#39;)]) ); // 渲染视图 $this->load->view(&#39;search_results&#39;, $data); } ``` --- #### **4. 分页参数集成技巧** 处理分页链接中的多条件参数(优化引用[2]的URL拼接): ```php // 扩展分页配置以自动携带所有GET参数 $config[&#39;page_query_string&#39;] = TRUE; $config[&#39;query_string_segment&#39;] = &#39;page&#39;; $config[&#39;reuse_query_string&#39;] = TRUE; // CI3.0+ 支持自动附加当前GET参数 ``` --- #### **5. 空条件处理与安全验证** 添加输入校验(参考引用[3]空条件拦截逻辑): ```php // 在控制器中增加校验 if (empty($keyword) && empty($category)) { $this->session->set_flashdata(&#39;error&#39;, &#39;请输入至少一个搜索条件&#39;); redirect(&#39;products&#39;); // 返回默认页 } ``` --- ### **关键优化点** 1. **SQL注入防护**:CodeIgniter的查询构造器自动过滤参数,无需手动转义。 2. **性能提升**:为频繁搜索的字段(如`category_id`)添加数据库索引。 3. **缓存机制**:对分类选项等静态数据使用`$this->cache->save()`减少数据库查询[^1]。 --- ### 示例查询结果展示 ```php <!-- 视图层:application/views/search_results.php --> <?php if (!empty($results)): ?> <ul> <?php foreach ($results as $item): ?> <li><?= $item[&#39;product_name&#39;] ?> - <?= $item[&#39;category_name&#39;] ?></li> <?php endforeach; ?> </ul> <?= $this->pagination->create_links() ?> <?php else: ?> <p>未找到匹配结果</p> <?php endif; ?> ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值