【问题标题】:strip query string after page load页面加载后去除查询字符串
【发布时间】:2013-06-30 19:39:40
【问题描述】:

我正在开发php,我的网页网址是这样的

http://localhost/myweb/?action=news
http://localhost/myweb/?action=my_profile
http://localhost/myweb/?action=my_upload
http://localhost/myweb/?action=my_collection
http://localhost/myweb/?action=chat
http://localhost/myweb/?action=my_friends
etc

例如,在特定页面中,有访问 href 链接的删除功能

http://localhost/myweb/?action=my_friends&delete=2414535435 <-friends id

我这样做是为了让它整洁,因为不看源就看不到链接

a href='#'

并使用javascript访问真实链接

$('.deleteclass').on('click', function () {
        var name= $(this).attr('nameattr');
        if(confirm('You sure want to delete '+name+'?')){
            window.location='?action=my_friends&delete='+this.id;
        }
    });

问题是,在我处理完删除并加载页面后,我不想在地址栏上显示完整链接。

http://localhost/myweb/?action=my_friends&delete=2414535435

我需要让它在地址栏上看起来像这样

http://localhost/myweb/?action=my_friends

有可能吗?也许通过mod重写?

【问题讨论】:

  • 不要使用这种混淆来给自己一种虚假的安全感。任何人都可以很容易地找出需要删除的 URL。您需要确保在您的 php 代码中有额外的检查。
  • 是的,我注意到了,如果这个人可以执行代码,我已经在 php 中提出了更多要求。实际上,如果该人知道链接对我来说没关系,但不知何故我不希望它显示在地址栏上。
  • 而且我使用链接是因为我不知道如何使用按钮(提交)来完成,因为在我的情况下,每个表格行都有一个删除链接,而不是所有/选择一个的单个删除按钮.
  • 您需要每行是一个单独的表单,或者每个删除提交按钮都需要包含您要删除的项目的 ID。可能最好每行都有一个表格。

标签: php javascript .htaccess mod-rewrite


【解决方案1】:

浏览器加载页面后,您不能删除 url。

在您的删除或其他操作后进行重定向。

header('Location: /myweb/?action=my_friends');

将错误/成功消息添加到会话变量(在执行标头之前的操作脚本中),以便您可以在其他页面上显示它们

$_SESSION['errors'] = "Delete Failed: For Some Reason";

并在其他页面上检查会话变量是否存在,显示它然后将其删除(否则它将停留在那里并且页面将继续认为有错误)

<?php

if(isset($_SESSION['errors'])) {
   //Do some code to show the error
   ...
   unset($_SESSION['errors']); //delete the error messages
}

【讨论】:

  • 感谢您的澄清,这就是我现在所做的,但它使我需要的一些数据消失了。例如删除失败时的错误消息。
  • 如果出现错误,将错误保存到会话变量中,并在其他页面上的会话变量中查找错误。显示会话代码的更新答案
猜你喜欢
  • 2012-05-28
  • 2018-01-30
  • 2021-01-16
  • 1970-01-01
  • 2016-01-07
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
相关资源
最近更新 更多