来自Excel的PHP打开链接运行页面三次

时间:2016-07-20 06:46:11

标签: php

我有一个奇怪的问题,我觉得很难在标题中总结。

首先

  • 我有一个网页,人们需要登录。
  • 我有一个Excel文档,其中包含指向该网页的链接。

问题: 当人们登录时,他们点击Excel文档中的链接。该网页告诉他们他们没有登录。

到目前为止我发现了什么:

  • 我在Mac上使用Office而我有任何问题。
  • 在Windows上使用Office的人执行会出现问题。
  • 我认为问题归因于SESSIONS,这可能是用户未应该登录的原因。

我做了一些测试。

每个网址都通过index.php

的index.php

<?php
session_start();
file_put_contents('log.txt', microtime().': SERVER '.print_r($_SERVER, true).PHP_EOL, FILE_APPEND);
exit;

现在,当我单击Mac上的Office链接(没有问题!!!)时,我得到了变量$_SERVER的转储。两个重要变量:

[HTTP_USER_AGENT] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
[HTTP_COOKIE] => PHPSESSID=77lpqmdmvskv33d2ddsdlfs5q7; rememberme=1%3Ae79e92271e7e05a5ee5679b659b3cb5cbb61e60d96c158f4648960136b175164%3Accdee80c3e42705fcd7e8c234525beda86d27394653dfdfb42bdd3ec98592ca1

您可以看到浏览器(Chrome)和Cookie,其中包含用于登录的rememberme Cookie。

现在,当我点击Windows上Excel中的链接时,我会在日志文件中打印三次$_SERVER变量!

首先:

[HTTP_USER_AGENT] => Microsoft Office Excel 2014
[HTTP_COOKIE] => PHPSESSID=0ivlfjf49j4b82858tstc2lmm3; PHPSESSID=tv6gs33j721d0tmm3rrjdoho45

注意用户代理,没有记住cookie。

第二

[HTTP_USER_AGENT] => Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; ms-office)
[HTTP_COOKIE] => PHPSESSID=0ivlfjf49j4b82858tstc2lmm3

注意,仍然没有Chrome浏览器和rememberme cookie。

第三

[HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
[HTTP_COOKIE] => PHPSESSID=3s0hvtssghk7uomvkpb5k70tc2; rememberme=1%3Aa9bd74ad58a0d7075c27108be1adbd26ba6d18f6e8b39073152d6780131ffe70%3A643852f8636c76c0bfc4017ec7fe3eab98dd57f5bcfdf86f0e37b5ec28a0c0ef

最后,用户代理是Chrome,并且设置了rememberme cookie。

所以,这是一个很长的故事。但是从Windows中点击Excel中的链接,它会做一些奇怪的事情。谁知道发生了什么?

1 个答案:

答案 0 :(得分:0)

哦,我发现了问题。以下来自superuser.com的回答

  

您正在使用的网址需要更多来自Cookie的信息   显示搜索结果而不是搜索页面。粘贴URL   进入不同的浏览器(或删除你的cookie),你就会得到   相同的结果。

     

单击Excel中的URL似乎在默认浏览器中打开它。但   这不是真的。在浏览器中打开它之前,请先使用Excel   运行Microsoft Office协议发现。这使用Windows / Internet   Explorer组件,用于确定URL是否有效。 (它不是   将自己标识为Internet Explorer,但作为&#34;用户代理:Microsoft   Office Existence Discovery&#34 ;.)如果结果(某种程度上)没问题   然后它将在您的默认浏览器中打开该检查的结果。

     

缺乏cookie(更确切地说:缺乏会话),GoDaddy给出了   Internet Explorer组件有些重定向。结果就是这样   在您的默认浏览器中打开。这是您正在查看的网址。

     

您的默认浏览器很可能不是Internet Explorer?然后   直接将URL粘贴到IE中并单击它以获取cookie,   然后也可以使链接在Excel中运行。 (仅用于测试;它是   不是永久的解决方案。)

     

使用不依赖某些隐藏的网址,您将获得更多运气   来自cookie的信息,比如   http://www.godaddy.com/domains/search.aspx?domainToCheck=superuser.com

来源:https://superuser.com/a/445431

所以要解决这个问题:
当Excel检查链接时,它会被重定向到&#39; / login&#39;因为它没有登录。最后,该URL是Excel在真实浏览器中打开的URL。

所以我更改了登录脚本,用户不会被重定向到&#39; / login&#39;,但保留在同一个URL上,如果没有登录,它将显示登录表单.Excel现在打开原始URL如果用户登录,它将看到该页面。如果未登录,将显示登录表单。