PHP:从 MS Office 中的链接加入浏览器 session

标签 php http session ms-office

<分区>

我想知道是否有人可以在这里提出答案:

我们有一个使用 PHP session (以及 SSL 等其他措施,在任何人开始对我谈论安全之前!)保护的系统,我们希望在就具体问题联系客户时通过电子邮件发送直接链接到系统.我们发送的链接包含 GET 参数。

我们的建议是让客户确保他们已登录,然后单击链接 - 链接在浏览器中启动,启动 session ,然后将用户直接带到所需的页面。但是,当用户从 Microsoft Office 应用程序中单击链接时,这不起作用。

当从 Outlook(或实际上是 Excel)中单击链接时, session 变量未被拾取,并且要求用户重新进行身份验证。进一步挖掘,似乎请求是通过用户代理设置为 Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727 ; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0E; .NET4.0C; ms-office) 但该站点是在 Chrome 中启动的(这也是设置 session 的浏览器)。我想知道是否有一些 session 安全代码启动,说如果浏览器不同, session 必须被欺骗?

为了解决这个问题,我尝试为初始页面加载设置一个重定向页面:

if (isset($_GET['targetpage'])) {
  // It's a GET request - redirect using header-location
  $all_get = $_GET;
  unset($all_get['targetpage']);
  $redir = $_GET['targetpage'].'?'.http_build_query($all_get);
  header('User-Agent:');
  header("Location: {$redir}");
  die();
}

这失败了:请求仍然通过 User-Agent 集,并且 session 不存在。

有什么想法/建议吗?

最佳答案

不要做 header('User-Agent:'); ... 因为这将给出一个空的用户代理,而在后续请求中,普通用户代理将再次被使用。

您可以尝试不同的 HTTP 30x 代码……我知道浏览器的行为往往会根据所使用的确切 30x 代码而有所不同。

关于PHP:从 MS Office 中的链接加入浏览器 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15923323/

相关文章:

php - 从两个相关表/模型中选择特定列

c# - 静态对象/变量是否存储在 .NET 上的 Web 应用程序的缓存/ session 中?

session - MVC 4 代码文件 (.cs) 重定向到操作

php - 如何在第三个变量 mysql 查询中对两个子查询计数求和?

PHP mysql 使用 PHP 语法插入的日期和时间不正确

java - 如何捕获本地 HTTP 流量

javascript - Node.JS HTTP 请求 - 分离回调函数

c# - 如何在 C# 中递归遍历并记录 HttpRequestMessage 的属性?

java - 跨浏览器和 flex air 共享 session

php - 如何在 VS Code 中将 PHP 代码花括号自动格式化为新行