php - 通过 PHP 登录保存经过身份验证的 session

标签 php html http curl session-state

这是引用这个早期的 StackOverflow 问题,login credentials ,其中 Tom B. 建议使用此格式通过 HTTP/HTTPS 登录:username:password@domain.com

这种方法使检查页面源代码的任何人都可以看到用户名和密码。

有什么方法可以通过 PHP (也许是 cURL) 执行初始登录,然后继续进行 HTML session ?我尝试了以下方法,但由于某种原因, session 未保存,导致后续 HTML 失败:

<?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://url.xxx');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERPWD, "user:password");
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    $output = curl_exec($ch);
    curl_close($ch);
    include 'sessionPage.html';
?>

这种格式也不起作用:

curl_setopt($ch, CURLOPT_URL, 'http://user:password@url.xxx');

我如何通过 PHP 脚本成功登录并将 session 转发到后续 HTML 页面? 资源是第三方的,所以我无法控制 session 信息。

谢谢。

最佳答案

您可以使用 cookie 文件来保存成功(手动)登录的 session_id。这样,curl 脚本将看起来是首先创建 session ID 的用户。

curl 脚本

function get_data( $url ) {
  $cookie = 'cookie.txt';
  $ch = curl_init();
  $timeout = 5;
  curl_setopt( $ch, CURLOPT_URL, $url );
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
  curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
  curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
  curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookie );
  $data = curl_exec( $ch );
  curl_close( $ch );

  return $data;
}

cookie 文件(只包含这一行)

www.awebsite.com    TRUE    /   FALSE   0   PHPSESSID   5rsiasdfasdfasdfasdf73dvi9r0

要获取 session ID,请手动登录到相关站点,使用浏览器开发工具查看 cookie 并复制 PHPSESSID。显然,使用这种方法,您只能自己先获取 session_id。

关于php - 通过 PHP 登录保存经过身份验证的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31937199/

相关文章:

php - mysql 选择不同的行,至少出现 (n) 次

php - 确定广告是否显示以及是否被点击

html - 滚动条不显示在网页中

分块传输编码 - 页面显示不正确

http - Web 应用程序如何在 HTTP 代理或负载平衡器之后恢复原始 URL?

php - 如何通过 .htaccess 在 404 错误重定向中传递查询字符串?

javascript - Facebook API - 发布到时间线

javascript - AngularJS Controller 等待响应(或设置回调)

sockets - 为什么代码显示 "Error 354 (net::ERR_CONTENT_LENGTH_MISMATCH): The server unexpectedly closed the connection."

php - 如何在 tymondesigns/jwt-auth 包生成的 laravel 5 中捕获全局异常?