【问题标题】:Codeigniter redirect vs. load viewCodeigniter 重定向与加载视图
【发布时间】:2013-10-17 06:39:26
【问题描述】:

我以前总是写$this->load->view() 来加载视图。我注意到有一个问题,特别是在地址栏中重新提交和 URL 时。相反,我开始使用redirect('controller/function','refresh') 来实现同样的目的。我的问题是:这是一个好的方法还是不赞成?我觉得这样我的代码更流畅,但我当然想知道这以后是否有任何副作用。

例如用例:

$id = $this->user_model->buildAccount($name, $email);

if(isset($id) && $id != '') {
    $this->session->set_userdata('id', $id);
    redirect('users/details');
} else {
    redirect('members/');
}

【问题讨论】:

标签: codeigniter redirect codeigniter-2


【解决方案1】:

对于CI,您采取的任何方法都可以,恕我直言,您的方法很好。在上面的代码中,您在创建会话后重定向用户,您还应该在 user/details 函数中检查会话的有效性。无论如何,您必须调用load->view() 来加载视图,无论是在任何函数中。所以,在哪里加载视图并不重要。

【讨论】:

  • 是的,我会经常检查会话和令牌,以确保对网站所有部分的访问都经过身份验证。很高兴你能分享你的意见。谢谢老哥
  • 乐于助人:D。如果对您有帮助,请考虑接受答案。 @spacemonkey
【解决方案2】:

您需要使用 PRG - Post/Redirect/Get 模式。 如果页面内容中有表单,则重定向和加载视图是不同的。

Scenario:

有一个视图 view_1,其中包含用于从帐户中借款的表单。在 view_1 中提交表单后,您想跳转到 view_2 并显示成功消息,并且您有 2 个选项可以实现相同的目的。 1. 加载带有成功消息的 view_2 或 2. 使用带有成功消息的闪存数据重定向到 view_2。

选项 1: 加载 view_2 并显示成功消息 当您提交表单并刷新时,它会导致重新提交并导致帐户多次扣款,这不应该是这种情况。您也可以看到弹出“确认重新提交表单”的警报。

选项 2:这是正确答案 PRG

PRG - 发布/重定向/获取 PRG 是一种 Web 开发设计模式,可防止某些重复的表单提交,这意味着,提交表单 (view_1) -> 重定向 -> 获取 (view_2)

Under the hood

带有此状态代码的 HTTP 响应将在位置标头字段中另外提供一个 URL。带有此代码的响应邀请用户代理(例如 Web 浏览器)向位置字段中指定的新 URL 发出第二个(否则相同)请求。

带有 HTTP 302 的 HTTP 1.0 或带有 HTTP 303 的 HTTP 1.1(“查看其他”)响应代码,以确保在这种情况下,Web 用户的浏览器可以安全地刷新服务器响应,而不会导致重新提交初始 HTTP POST 请求.

Source

【讨论】:

    猜你喜欢
    • 2014-11-29
    • 2015-04-25
    • 2018-04-01
    • 2011-10-07
    • 2014-10-18
    • 2013-07-12
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多