您可以向用户隐藏 $_GET 值和 URL 吗?

Can you hide the $_GET values & URL from the user?

我开发了一个无法访问 Internet 的内部应用程序。

我希望能够让用户登录并只看到 sitesname.net 而没有 URL 过去。

目前,他们看到一个很长的 URL,其中包含基于会话和他们正在执行的功能的目录、页面和 $_GET 值。我注意到他们中的一些人把 $_GET 值的书签原封不动地做了,所以他们在做一些不应该做的事情。

我希望能够对它们隐藏目录、页面和 $_GET 值。

是否有公认的方法来做到这一点?

该应用程序是在 apache 服务器上使用 phpmysql 构建的。

我不是 mod_rewrite 方面的专家,但我认为您可以使用 mod_rewrite 隐藏获取参数。您可以使用 "post" 作为 Http 方法,这样您将拥有一个干净的 url(即您的 url 中没有参数)并且 post 也是安全的,如果您是考虑安全。

  • GET - 从指定资源请求数据
  • POST - 将要处理的数据提交到指定资源

有关 GET 和 POST 的更多信息,您可以访问这些 link,它们将帮助您决定在何种情况下必须使用任一 http 方法。这里:

GET vs POST (Yay! In Tabluar form)
HTTP Methods
PHP Form Handling

这个问题没有唯一的答案,因为这些参数中可能包含不同种类的信息:

  • 导致操作的表单数据,例如更新用户的首选项。确保使用 method="post" 编写此类表单,这会将数据放入 HTTP 正文(可通过 $_POST 访问),而不是 URL(可通过 $_GET 访问)。请注意,这 不会 给你任何安全,因为精明的用户仍然可以读取和操作正在发送的数据,但它确实保持 URL 整洁,并防止用户为带有操作的页面添加书签。一旦数据被处理,将用户重定向到成功页面(没有 POST 参数)通常也很有用,这样点击 "refresh" 就不会尝试重新发送数据。
  • 需要在用户整个访问期间与用户保持一致但下次清除的数据。使用 cookie(setcookie() 写入,$_COOKIE 读取下一页)。同样,用户可以查看和操作这些,但对于需要过期的数据,它们更易于管理。
  • 需要保密或安全的数据,例如已验证的用户身份。使用 PHP session;会话 ID 是一个随机字符串,应该配置为使用 cookie,实际数据永远不会发送给用户,只是存储在您的服务器上以该随机 ID 命名的文件中。
  • 告诉服务器为用户提供哪个页面的数据。这几乎必须在 URL 中,因为这是从用户浏览器发送到服务器的内容; mod_rewrite 不能神奇地让它隐形,但可以让它看起来更好看。例如,您可以说每当用户请求页面 http://example.com/users/IMSoP 时,服务器都会将请求视为针对 http://example.com/user_page.php?username=IMSoP 的请求;但是,您不能让 URL 不说 IMSoP,否则您的代码将不知道要显示谁的用户页面。
  • 页面上的瞬态消息和面板的数据。如果你想对你的 UI 感兴趣,你可以大量使用 AJAX 在单独的请求中加载部分页面,然后用 JavaScript 将它们拼接在一起。每个部分的 URLs 就像一个普通的 URL,但除非他们深入浏览器的调试工具,否则用户不会看到那些 URLs,只能看到主页他们加载。在最极端的情况下,这会导致 "single page interface",您在其中加载主页,而网站的所有其他部分都只是动态拉入的面板;这在技术上很容易,但要获得一个易于用户使用的网站却相当棘手,不仅要让他们因意外行为而感到沮丧,而且不能做 "normal" 诸如书签部分之类的事情。