通过PHP登录保存经过身份验证的会话

时间:2015-08-11 08:47:46

标签: php html http curl session-state

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

此方法会让检查页面来源的任何人都可以看到用户名和密码。

有没有办法通过PHP (可能是cURL)执行初始登录,然后继续HTML会话?我尝试了以下操作,但由于某种原因,会话未保存,导致正在进行的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脚本成功登录并将会话转移到正在进行的HTML页面? 资源是第三方,因此我无法控制会话信息。

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用cookie文件来保存成功(手动)登录的session_id。这样,curl脚本将首先显示为创建会话ID的用户。

卷曲脚本

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

获取会话ID,手动登录相关网站,使用browser dev工具查看cookie并复制PHPSESSID。显然,使用这种方法,您只能先自己获取session_id。

答案 1 :(得分:0)

仅当php在同一台机器上运行时才可能。您基本上需要做的是从cURL的响应中获取cookie并使用PHP将该cookie写入正确位置的文件系统以模拟成功登录。所有这些假设cookie被用于身份验证。还有其他形式的身份验证:持久表单,URL中的sessionid,IP地址等......