的 的>使用Javascript
var username = "user1";
var password = "user1";
jQuery.ajax({
url : "http://domainname.com/rest/user/login.json",
type : 'post',
data : 'username=' + encodeURIComponent(username) + '&password=' + encodeURIComponent(password),
dataType : 'json',
error : function(data) { console.log("error"); console.error(data); },
success : function(data) { console.log("success"); console.info(data); }
});
的 的>使用PHP / Curl
// Method: POST, PUT, GET etc
// Data: array("param" => "value") ==> index.php?param=value
function CallAPI($method, $url, $data = false)
{
$curl = curl_init();
switch ($method)
{
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_PUT, 1);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}
// Optional Authentication:
//curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
//curl_setopt($curl, CURLOPT_USERPWD, "username:password");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
return curl_exec($curl);
}
// Example
$method = "POST";
$url = "http://domainname.com/rest/user/login.json";
$rurl = "http://domainname.com/";
$postdata = array('username'=>'editor1', 'password'=>'editor1');
$response = CallAPI($method, $url, $postdata );
print "<pre>";
print_r($response);
结果:
{"sessid":"R03y8-40VBh6FDEIfi9Lnm2kh2SikCxY3105egCynDY","session_name":"SESS2063f746500d52bace78ba433478bd2d","user": ......
我正在尝试使用两个不同的脚本登录,一个来自JQuery,另一个来自PHP / Curl。
当我解雇JQuery时,它是自动生成的。 但是,当我尝试从PHP / Curl自动登录时,它会给我上面的成功响应,但是当打开URL无法登录时,任何人都可以解释这是什么问题。
根据我的假设,Session_name / Sessid可能存储在cookie中吗?
答案 0 :(得分:1)
根据我的假设,Session_name / Sessid可能存储在cookie中吗?
与许多其他引擎一样,Drupal需要会话cooke,看起来像SESSa89ab839dd1casdasdec163e12679c2f2ea1e = asdfasdf2323423dsa。使用setcookie(http://php.net/manual/en/function.setcookie.php)在php中设置此cookie(如session_name = sessid)并将响应发送给客户端。
1。我的问题是,当我们使用PHP / CURL的jQuery instread时,它会自动将cookie值添加到浏览器中吗?
当Jquery向服务器发送查询时,浏览器会使用Set-Cookie标头获得响应,您可以使用chrome开发人员工具(或浏览器的类似工具)进行检查。
当你在服务器端执行PHP代码时,PHP对响应cookie没有任何作用,因为PHP解释器不是浏览器。
看看这个虚拟查询方案:
1)Jquery WebBrowser =&gt; Apacher / PHP服务器(login.json代码) Apacher / PHP server =&gt;浏览器(使用会话cookie响应)
2)登录php端 网络浏览器=&gt; Apacher / PHP服务器(你的脚本) Apacher / PHP server =&gt; Apacher / PHP(调用登录代码) Apacher / PHP server =&gt; Apacher / PHP服务器(登录代码对第一个脚本的响应)
这里cookie信息丢失了,因为它只是php代码中的http查询而已。没有自动设置标头。您需要使用setkookie()函数或$ _COOKIE变量手动设置此cookie。
Apacher / PHP server =&gt; Web浏览器(包含您在当前脚本中设置的所有cookie)
对不起我的语法,希望我帮助你。