本文目录一览:
php单点登陆(sso)实例
建一个在线用户表 字段 包括session_id,user_id, 如果你想 用户登录后没有退出 用户继续使用相同账户 密码登录的话 踢出原来已经登录的用户 用户登录成功时,把sessuib_id,user_id插入到在线用户表中 下次用户登录时 根据user_id查询这个表 若有记录取得相应的session_id 并删除相应的session文件即可。
php curl 模拟登录并获取数据实例详解
PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下curl扩展。
代码实战
先来看登录部分的代码:
//模拟登录
function login_post($url, $cookie, $post)
{
$curl = curl_init(); //初始化curl模块
curl_setopt($curl, CURLOPT_URL, $url); //登录提交的地址
curl_setopt($curl, CURLOPT_HEADER, 0); //是否显示头信息
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0); //是否自动显示返回的信息
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中
curl_setopt($curl, CURLOPT_POST, 1); //post方式提交
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post)); //要提交的信息
curl_exec($curl); //执行cURL
curl_close($curl); //关闭cURL资源,并且释放系统资源
}
函数login_post()
首先初始化curl_init()
,然后使用curl_setopt()
设置相关选项信息,包括要提交的url地址,保存的cookie文件,post的数据(用户名和密码等信息),是否返回信息等等,然后curl_exec
执行curl,最后curl_close()
释放资源。注意PHP自带的http_build_query()
可以将数组转换成相连接的字符串。
接下来如果登录成功后,我们要获取登录成功后的页面信息。
//登录成功后获取数据
function get_content($url, $cookie)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie
$rs = curl_exec($ch); //执行cURL抓取页面内容
curl_close($ch);
return $rs;
}
函数get_content()
中也是先初始化curl,然后设置相关选项,执行curl,释放资源。其中我们设置CURLOPT_RETURNTRANSFER
为1即自动返回信息,而CURLOPT_COOKIEFILE
可以读取到登录时保存的cookie信息,最后将页面内容返回。
我们的最终目的是要获取到模拟登录后的信息,也就是只有正常登录成功后才能获取的有用信息。接下来我们以登录开源中国的移动版为例,看看如何抓取到登录成功后的信息。
//设置post的数据
$post = array(
'email' => 'oschina账户',
'pwd' => 'oschina密码',
'goto_page' => '/my',
'error_page' => '/login',
'save_login' => '1',
'submit' => '现在登录'
);
//登录地址
$url = "";
//设置cookie保存路径
$cookie = dirname(__FILE__) . '/cookie_oschina.txt';
//登录后要获取信息的地址
$url2 = "";
//模拟登录
login_post($url, $cookie, $post);
//获取登录页的信息
$content = get_content($url2, $cookie);
//删除cookie文件
@unlink($cookie);
//匹配页面信息
$preg = "/td class='portrait'(.*)\/td/i";
preg_match_all($preg, $content, $arr);
$str = $arr[1][0];
//输出内容
echo $str;
使用总结
- 初始化curl;
- 使用
curl_setopt
设置目标url,和其他选项; curl_exec
,执行curl;- 执行后,关闭curl;
- 输出数据。 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
php简单的登陆验证用户名和密码怎么写
给你个实例参考一下php编写登陆验证用户名和密码吧。
登录页面
login.html
负责收集用户填写的登录信息
<html>
<head>用户登录</head>
<form name="LoginForm" method="post" action="login.php" onSubmit="return InputCheck(this)">
<p>
<label for="username" class="label">用户名:</label>
<input id="username" name="username" type="text" class="input" />
</p>
<p>
<label for="password" class="label">密 码:</label>
<input id="password" name="password" type="password" class="input" />
</p>
<p>
<input type="submit" name="submit" value=" 确 定 " class="left" />
</p>
</form>
</html>
登录处理
login.php
负责处理用户登录与退出动作。
<?php
//登录
if (!isset($_POST['submit'])) {
exit('非法访问!');
}
$username = htmlspecialchars($_POST['username']);
$password = MD5($_POST['password']);
//包含数据库连接文件
include('conn.php');
//检测用户名及密码是否正确
$check_query = mysql_query("select userid from user_list where username='$username' and password='$password' limit 1");
if ($result = mysql_fetch_array($check_query)) {
//登录成功
session_start();
$_SESSION['username'] = $username;
$_SESSION['userid'] = $result['userid'];
echo $username, ' 欢迎你!进入 <a href="my.php">用户中心</a><br />';
echo '点击此处 <a href="login.php?action=logout">注销</a> 登录!<br />';
exit;
} else {
exit('登录失败!点击此处 <a href="javascript:history.back(-1);">返回</a> 重试');
}
//注销登录
if ($_GET['action'] == "logout") {
unset($_SESSION['userid']);
unset($_SESSION['username']);
echo '注销登录成功!点击此处 <a href="login.html">登录</a>';
exit;
}
?>
用户中心
my.php
是用户中心,作为用户登录检测。
<?php
session_start();
//检测是否登录,若没登录则转向登录界面
if (!isset($_SESSION['userid'])) {
header("Location:login.html");
exit();
}
//包含数据库连接文件
include('conn.php');
$userid = $_SESSION['userid'];
$username = $_SESSION['username'];
$user_query = mysql_query("select * from user_list where userid = '$userid' limit 1");
$row = mysql_fetch_array($user_query);
echo '用户信息:<br />';
echo '用户ID:', $userid, '<br />';
echo '用户名:', $username, '<br />';
echo '<a href="login.php?action=logout">注销</a> 登录<br />';
?>
conn.php
用于连接数据库
<?php
$conn = mysql_connect("127.0.0.1", "root", "") or die("数据库链接错误" . mysql_error());
mysql_select_db("info_db", $conn) or die("数据库访问错误" . mysql_error());
mysql_query("set names gb2312");
?>
如何用php做个登陆界面?
你可以做一个简单的例如你只有用户名和密码即可那么你先在数据库(以mysql为例)中建表例如叫做user 字段为 id name pass分别是编号、用户名、密码长度分别是int(8) a_t(自动编号) 主键,varchar(50) ,varchar(50) 你可以添加一个测试数据 例如 1,admin,admin//说明密码这里不说加密的问题,用明文实现 登录页面的代码:login.php
<html>
<head><title>用户登录</title></head>
<body>
<form action="checklogin.php" name="loginform" method="post">
用户名:<input name="name" type="text"><br>
密 码:<input name="password" type="password"><br>
<input value="登录" type="submit"><br>
</form>
</body>
</html>
checklogin.php
代码(检测登录):
<?php
$name = $_POST['name'];
$pass = $_POST['password'];
session_start(); //这个可以维持登录状态,可以参照session的使用
//登录检查函数
function login_state($uid, $user_shell) {
$sql = "SELECT * FROM `user` WHERE `name`='$name'";
$query = @mysql_query($sql) or die(mysql_error());
$us = is_array($row = @mysql_fetch_array($query));
$user_shell = $us ? $user_shell == $row['password'] : FALSE;
if ($user_shell) {
echo "<script>alert('登录成功');</script>";
return $row;
} else {
echo "<script>alert('您暂时不能浏览该页面,请先登录');location.href='login.php';</script>";
}
}
login_state($name, $password);
?>
希望可以帮到您,如果还有问题可以联系2458285853