【问题标题】:Hiding ID in Codeigniter URL在 Codeigniter URL 中隐藏 ID
【发布时间】:2018-01-02 12:38:01
【问题描述】:

我想了解并使用 codeigniter 路由来隐藏我传递给控制器​​的 ID。

网址是:

http://172.24.130.150/umobility/user/index/2

这里,

umobility 是我的项目名称。

user 是我的控制器名称。

我搜索了网站,发现我可以这样定义路线:

$route['user/index/(:any)'] = "user/index/$1/$2";

但这仍然没有隐藏URL最后的ID。

请解释和帮助

【问题讨论】:

  • 为什么要隐藏它?
  • @DanyalSandeelo 用户可能会从 URL 更改 ID,这将允许将任何 ID 发送到可以处理的控制器,但我仍然不想要这个
  • @Rajan,您可以将其用作 CodeIgniter 中的库 codeigniter.com/user_guide/libraries/encryption.html
  • 只有登录用户才能在 URL 中请求自己的 id 吗?
  • @Tpojka 预计登录用户可能不会只是在 url 后面放一些随机 id 并将该 id 传递给控制器​​

标签: php codeigniter


【解决方案1】:
$route['user/(:any)'] = 'user/user_by_name/$1';

这会将所有内容重新路由到用户控制器中的“user_by_name”方法,您需要使用该名称查询数据库。

http://www.codeigniter.com/userguide3/general/routing.html

【讨论】:

  • 抱歉,umobility 是我的项目名称。用户是我的控制器
【解决方案2】:

您可以对链接中的 id 进行 base64 编码,这不会隐藏它,但会使它稍微模糊。

在视图中...

// http://172.24.130.150/umobility/user/index/2

$b64_uid = urlencode(base64_encode($user_id));

echo anchor('user/index/' . $b64_uid, 'Anchor Back to User');

// should create link like http://172.24.130.150/umobility/user/index/Mg%3D%3D

在控制器中...

public function index($b64_uid = NULL) {

  // did we get an id?
  if (is_null($b64_uid)) {
    redirect($this->_redirect_url);
  }

  // decode it.
  $user_id = base64_decode(urldecode($b64_uid));

  // validate.
  if (!is_numeric($user_id)) {
    redirect($this->_redirect_url);
  }

  // do something with $user_id...

}

【讨论】:

    【解决方案3】:

    您可以使用<form action="function_name" method="POST">而不是在URL中添加ID。

    【讨论】:

    • 是的,我可以这样做,但我们不能为每个请求使用表单元素,如果用户点击后退按钮,这也将使reconfirm form submission 成为强制性
    • 尝试加密和解密方法来保护你的变量链接在这里codeigniter.com/user_guide/libraries/encryption.html
    猜你喜欢
    • 2013-07-07
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多