在代码点火器中隐藏查询字符串


Hide query string in code igniter

当页面重新加载时,是否可以从url中隐藏查询字符串。

我在主页上有一个链接,它改变了网站的语言,链接看起来像这个

<a href="<?php echo base_url(); ?>home/box/<?php echo $template_data['box_id'] ?>/<?php echo $lang['language_name'] ?>/?id=<?php echo $_GET['id'] ?>&lid=<?php echo $lang['language_id'] ?>">

当页面重新加载时,我想从我的url中隐藏id和盖子我不能使用会话和cookie,因为我的编码方式不可能使用它们

还有其他可能吗?

提前感谢

不幸的是,这是不可能的-浏览器需要有向页面发送请求的URL,而这正是它将向用户显示的内容。在最好的中,您可以使用pushState破解一些更改JavaScript的历史,但这是一个糟糕的解决方案。你需要其他方式。一种方法是通过POST,这取决于你拥有它的原因:

<form action="<?php echo base_url(); ?>home/box/<?php echo $template_data['box_id'] ?>/<?php echo $lang['language_name'] ?>" method="POST">
    <input type="hidden" name="id" value="<?php echo $_GET['id'] ?>" />
    <input type="hidden" name="lid" value="<?php echo $lang['language_id'] ?>" />
    <input type="submit" value="Style this like a link" />
</form>

虽然不优雅,但这是以兼容的方式做到这一点的唯一方法。如果这仍然不可行,你可能需要重新思考你的模式,以及为什么你需要隐藏这些信息。

您需要再次重定向以删除查询部分。或者通过路由重写url,使其看起来像http://example.com/home/box/<temp>/<lang>/<id>/<lang_id>

并且从控制器捕获具有$this->uri->segment(n) 的变量

但我看不出隐藏查询的意义

为什么不使用某种双向编码?http://codeigniter.com/user_guide/libraries/encryption.html

这样,您就不必更改uri,只需在处理之前对值进行解码(在发送之前进行编码)。当然,任何知道您正在使用CI的人仍然可以访问真实值,因此自定义加密方法将是理想的选择。

为什么要隐藏url或其部分?让我们看一个例子:http://www.sturm.xxx:8080/client/index.php/c_registration/modify_my_account/12

登录后,用户可以修改其注册数据(密码、电子邮件地址等)。在上面的链接中,数字12是用户id。如果用户足够聪明,可以重写用户id,瞧,可以窃取或修改另一个用户的个人数据。