【问题标题】:Need to store a PHP session variable when a link is clicked单击链接时需要存储 PHP 会话变量
【发布时间】:2013-07-27 21:50:23
【问题描述】:

在我的代码中我有一个链接:

 <a href='http://www.anotherpageinmywebsite.com'>Click for the other page</a>

当用户单击此链接时,我需要将值保存到 PHP 会话变量中。我不想使用 Ajax、iframe 和 GET 变量(我不想让用户看到会话变量,因为它是敏感数据),我也不想编辑将页面上的所有链接放在一个表单中。

看起来它应该是可能的——因为毕竟单击链接会生成对网络服务器的调用以加载新页面,我不应该能够添加一些代码吗(不知何故)在自然过程中“搭载”链接以将“加载此新网页”请求发布到网络服务器?

当用户单击链接以更新 PHP 会话变量(最好不使用 GET 变量、ajax 或 iframe)时,我如何“搭载”这个自然发生的事件序列。

【问题讨论】:

  • @rid 在点击链接之前可以在 javascript 中访问它。
  • 这是一个电子商务网站,但我们没有 SSL 证书。我正在处理的要求是“没有 GET 变量”。

标签: php html session


【解决方案1】:

如果我们假设您正在使用一些基于 PHP 的框架,并且您有一个根据 URL 为页面提供服务的控制器 - 实际上这很简单。

假设您使用的是 CodeIgniter - 但对于大多数 MVC 来说,逻辑是相同的。

<?php

class Web extends Controller {

  // this will fire when you access http://mysite.com/mypage
  function mypage($encoded_value) {
    $decoded_value = decode($encoded_value);

    // although CI has a different way of doing this
    $_SESSION['mypagesessionvar'] = $decoded_value; 

    $this->load->view('mypage'); // this loads the actual page
  }

}

【讨论】:

  • 基于问题,提到敏感,并且我们必须假设服务器上正在使用什么 - 我会说这个变量的值应该在某个地方后端并与可以点击的实际链接相关。很多假设,是的。我尝试解决这个问题的一种方法(如果它必须以某种方式来自前端)是我将有另一个参数,它实际上会以某种方式编码。然后该参数将在控制器的函数中使用并提供给会话变量(当然首先解码)。
  • 这是直接的 php、javascript、html -- 没有库,没有 jquery,只有 php、javascript 和 html。
  • 好吧,那么我建议以相同的方式执行此操作,但使用直接的 PHP 和编码的 GET 参数(我知道您说不使用 GET,但我没有看到替代方法)。然后你有你的 PHP 页面,只需通过 $_GET['value'] 获取值,对其进行解码并将其存储在 $_SESSION 中以供以后使用。
【解决方案2】:

我想利用浏览器的默认行为,当用户单击一个链接,该链接会回调到 Web 服务器——我想“搭载”该默认行为并发送更新的会话变量。我试图避免额外调用服务器来更新我的会话变量,并且我的要求是“不允许 GET 变量”。

最后我们下注并编写了一个 Ajax 调用来设置会话变量。我们无法弄清楚如何在不使用 GET 变量的情况下“搭载”点击链接的默认行为。

【讨论】:

    猜你喜欢
    • 2012-02-06
    • 2014-05-17
    • 2011-12-05
    • 2016-06-28
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多