• PHP网络服务


    【Socket】

    socket_create 用于创建一个Socket
    socket_bind 用于将IP地址和端口绑定到socket_create 函数所创建的句柄中。
    socket_listen 在绑定Socket后,服务器端使用此函数监听客户端数据。
    socket_set_block 设置非阻塞模式
    socket_write 向Socket写入数据
    socket_read 从Socket中读取指定长度的数据
    pfsockopen 实现长连接。客户端与服务器端先建立通信连接,不断开,然后再进行报文发送和接收。
    socket_set_option 设置Socket的控制选项。
    socket_last_error 返回操作中任何Socket函数产生的最后错误,返回值是一个int型的错误代号。
     
    session 和 cookie】
    相关函数:
    session_start();
    $_SESSION[];
    session_unset();
    session_destroy();
    setcookie();
    $_COOKIE;
     
    可以在php.ini中如下配置:session.cookie_domain=.baidu.com
    那么http://a.baidu.comhttp://b.baidu.com 都能访问当前的Cookie了。
     
    session_save_path() 函数存储Session临时文件,可缓解因临时文件的存储导致服务器效率降低和站点打开缓慢的问题。
    该函数应在session_start()函数之前调用。
     
    SESSION 的数据保存在服务器端的文件或数据库中。
    默认情况下,PHP.ini 中设置的 SESSION 保存方式是 files(session.save_handler = files),即使用读写文件的方式保存 SESSION 数据,而 SESSION 文件保存的目录由 session.save_path 指定,文件名以 sess_ 为前缀,后跟 SESSION ID,
    如:sess_c72665af28a8b14c0fe11afe3b59b51b。文件中的数据即是序列化之后的 SESSION 数据了。
     
    如果访问量大,可能产生的 SESSION 文件会比较多,这时可以设置分级目录进行 SESSION 文件的保存,效率会提高很多,
    设置方法为:session.save_path="N;/save_path",N 为分级的级数,save_path 为开始目录。
     
    当写入 SESSION 数据的时候,php 会获取到客户端的 SESSION_ID,然后根据这个 SESSION ID 到指定的 SESSION 文件保存目录中找到相应的 SESSION 文件,不存在则创建之,最后将数据序列化之后写入文件。
     
    读取 SESSION数据是也是类似的操作流程,对读出来的数据需要进行解序列化,生成相应的 SESSION 变量。
     
    1. Session的机制:session采用的是在服务器端保持状态的方案,并且有自己对应的唯一标识session_id,区分不同用户之前的信息。
    2. session的工作原理
    (1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
    (2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
    (3)当执行PHP脚本时,通过使用session_register()函数注册session变量。
    (4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
     
    3.Session项目实战中都有哪些应用:登录、验证码
    4.Session的优缺点
    (1)session的优点:唯一性、方便调用、不会过多占用资源,是存储在服务器的一组临时数据。一般情况下,我们在做用户登录时,会将用户数据存入session。这样,在任何页面都可以方便调用,而且 每个客户端会产生唯一的session_id,不会混肴。并且在关闭浏览器后,服务器会有session回收机制,自动删除过期session
    (2)缺点:在客户端是以cookie方式保存的,禁用cookie就没用了。
     
    5.Session和Cookie的联系以及区别
    联系:Session在客户端也需要保存一个标识,所以就要借助Cookie,session是通过cookie来工作的session和cookie之间是通过$_COOKIE['PHPSESSID']来联系的,通过$_COOKIE['PHPSESSID']可以知道session的id,从而获取到其他的信息。
    区别:Cookie机制采用的是在客户端(浏览器)保持状态的方案,而session机制采用的是在服务器端保持状态的方案
     
    6.Cookie的机制
    Cookie和Session的机制原理类似,都是会为每一个用户生成一个特定的值,这次是在客户端保存,当我们打开cookie里面保存了我们个人信息的网站,他会将我们的个人信息提交到服务器,之后请求服务器相应资料信息
     
    7.Cookie的原理
    当你访问一个网站的时候,可以将服务器的一些少量的数据保存到硬盘上,比如说用户名,id等,等你下次访问的时候,服务器会首先寻找这个文件然后读取你的相关信息,这样可以让你在不输入用户名密码的情况下直接登陆网站
     
    8.Cookie在项目实战中都有哪些应用:记住用户名密码
     
    9.Cookie的优缺点:
    优点:不需要服务器资源空间 ;持久时间更长
    缺点:客户端大小受限制 ;用户禁用Cookie那么就废用了 ;不安全
     
    Cookie是存储在客户端上的一小段数据。setcookie()函数必需在其输出数据之前调用,和header()、session_start()函数是相同的。但是有时候确实前面需要输出,可以这样:ob_start();session_start();$_SESSION[user]=1;ob_end_flush();
    创建cookie: setcookie("msg","12345",time()+3600); //设置过期时间为一个小时。
    删除cookie: setcookie("msg","",time()+3600); //将cookie的值设置为空。
    判断是否存在cookie: $_COOKIE[‘msg’];
    一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。
     
    使用session_start()函数创建会话(即session)。使用$_SESSION[]来存储和取回session中的变量。使用session_unset()函数释放指定的session变量,并不完全删除会话。使用session_destroy()函数完全删除当前会话。
    可以在php.ini中如下配置: session.cookie_domain=.baidu.com,那么http://a.baidu.comhttp://b.baidu.com 都能访问当前的Cookie了。
    session_save_path() 函数存储Session临时文件,可缓解因临时文件的存储导致服务器效率降低和站点打开缓慢的问题。该函数应在session_start()函数之前调用。
     
    php.ini里面关于session的配置:
    session.auto_start
    session.cookie_domain
    session.cookie_lifetime
    session.cookie_path
    session.name
    session.save_path
    session.use_cookies
    session.use_trans_sid
    session.gc_probability = 1
    session.gc_divisor = 100
    session.gc_maxlifetime = 1440
    session.save_handler
     
    cookie是存储在客户端的,session是存储在服务器端的,但是仍然需要在客户端存储一个SessionID。如果用户禁用了cookie,那么需要用其他办法传递SessionID。
     
    传递SessionID的问题: session_name() 和 session_id(),例如:
    <a href=”1.php? <?php echo session_name().’=’.session_id() ?>”>跳转</a>
    <a href=”1.php? <?php echo SID ?>”>跳转</a>
    如果开启了cookie,那么SID就是空,否则SID就有值。
    在LVS负载均衡的多台机器中,可以可以设置将session存储在MySQL、memecache、Redis等,使用 session_set_save_handler()进行设置。这样就保证了多台机器轮询过程中session不会丢失。(单点登录?)
     
    Session和Cookie的联系以及区别:
    联系:Session在客户端也需要保存一个标识,所以就要借助Cookie,session是通过cookie来工作的session和cookie之间是通过$_COOKIE['PHPSESSID']来联系的,通过$_COOKIE['PHPSESSID']可以知道session的id,从而获取到其他的信息。
    区别:Cookie机制采用的是在客户端(浏览器)保持状态的方案,而session机制采用的是在服务器端保持状态的方案
     
    Session的优缺点:
    (1)session的优点:唯一性、方便调用、不会过多占用资源,是存储在服务器的一组临时数据。一般情况下,我们在做用户登录时,会将用户数据存入session。这样,在任何页面都可以方便调用,而且 每个客户端会产生唯一的session_id,不会混肴。并且在关闭浏览器后,服务器会有session回收机制,自动删除过期session
    (2)缺点:在客户端是以cookie方式保存的,禁用cookie就没用了。
    Cookie的优缺点:
    优点:不需要服务器资源空间 ;持久时间更长
    缺点:客户端大小受限制 ;用户禁用Cookie那么就废用了 ;不安全
     
    【单点登录】
    [我自己想出的解决办法] 多台服务器共享cookie,有一台专门的服务器(设为A服务器)用来实现登录,存储用户cookie;当请求到其他服务器的时候,都来请求A服务器校验是否登录。退出登录同理。
     
    【CURL】
    CURL支持的协议:HTTP、FTP、Telnet。CURL可以实现Cookie、验证、表单提交、文件上传。
    建立CURL请求的基本步骤:初始化[cur_init()];设置选项,包括URL[curl_setopt()];执行并获取HTML文档内容[curl_exec($curl) ];释放CURL句柄[curl_close()]。
     
    CURL发送GET和POST请求
    function curlGet(){
    $ch = curl_init(); //初始化
    curl_setopt($ch, CURLOPT_URL, "http://www.test.com"); //设置url
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //第三个参数是1表示不输出,0允许输出
    curl_setopt($ch, CURLOPT_HEADER, 1); //将头文件信息作为数据流输出
    $output = curl_exec($ch); //执行请求
    $info = curl_getinfo($ch); //返回CURL执行后的请求信息
    curl_close($ch); //释放CURL句柄
    echo $output;
    }
    function curlPost()
    {
    //发送POST数据,使用$_POST接收
    $post_data = ['user'=>'root','pwd'=>'123456'];
    //上传文件,注意要有@符号! 使用$_FILES接收
    $post_data = ['file1'=>'@E:/s1.jpg','file2' => '@E:/s2.zip'];
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.test.com");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1); //设置为POST
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); //把POST的变量加上
    $output = curl_exec($ch);
    curl_close($ch);
    echo $output;
    }
     
  • 相关阅读:
    关于产品那些事
    关于“编程的本质”的探讨
    分享一款在线贝塞尔曲线调试器
    HTML、CSS、JS对unicode字符的不同处理
    HTTP Content-Disposition Explanation [ from MDN ]
    认证 (authentication) 和授权 (authorization) 的区别
    事件驱动引擎会取代多线程编程吗
    你所不知道的JSON
    都有哪些特殊而实用的的搜索引擎?
    巨头们的GitHub仓库整理
  • 原文地址:https://www.cnblogs.com/rxbook/p/10912992.html
Copyright © 2020-2023  润新知