当页面重新加载时,是否可以从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,因为我的编码是以不可能使用它们的方式完成的
还有其他可能吗?
提前致谢
答案 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,瞧,可以窃取或修改其他用户的个人数据。