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

时间:2012-03-26 14:08:54

标签: php codeigniter

当页面重新加载时,是否可以从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'] ?>">

我想在页面重新加载时隐藏我的网址中的ID和封面 我不能使用会话和cookie,因为我的编码是以不可能使用它们的方式完成的

还有其他可能吗?

提前致谢

4 个答案:

答案 0 :(得分:0)

不幸的是,这是不可能的 - 浏览器需要有一个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>

不优雅,但这是以兼容的方式实现这一目标的唯一方法。如果仍然不可行,您可能需要重新考虑您的模式以及您需要隐藏此信息的原因。

答案 1 :(得分:0)

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

并从控制器捕获带有$this->uri->segment(n)

的变量

但是我没有看到隐藏查询的意思

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

为什么要隐藏网址或其中的部分内容?我们来看一个例子: http://www.sturm.xxx:8080/client/index.php/c_registration/modify_my_account/12

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