【PHP】JSON传值与PHP接收的几种情况,json几种情况
利用Chrome的后台网络,分析了通过JQuery的$.ajax()把 json 数据 post 给 PHP时的几种情况:
<ul> <li> <p><span><strong>无法</strong></span>在PHP中通过$_POST 以及 $_REQUEST 获取json数据,即</p> <pre class="code"><span>$json</span> = <span>$_POST</span>['json']; <span>//</span><span> empty($json) 为1</span>
注:PHP 默认只识别 application/x-www.form-urlencoded 标准的数据类型,因此,对型如 text/xml 或者 soap 或者 application/octet-stream 之类的内容无法解析,如果用 $_POST 数组来接收就会失败。
情况A:
<p>js里<span><strong>没有</strong></span>加入属性contentType: "application/json; charset=utf-8",</p> <pre class="code"><span>var</span> submit_sync = <span>function</span><span>() { $.ajax({ type: </span>"post"<span>, url: </span>'add-post-json.php'<span>, async: </span><span>false</span>, <span>//</span><span> 使用同步方式</span> <span>//</span><span> 1 需要使用JSON.stringify 否则格式为 a=2&b=3&now=14...</span> <span>//</span><span> 2 需要强制类型转换,否则格式为 {"a":"2","b":"3"}</span> <span> data: JSON.stringify({ a: parseInt($(</span>'input[name="a"]'<span>).val()), b: parseInt($(</span>'input[name="b"]'<span>).val()), now: </span><span>new</span> Date().getTime() <span>//</span><span> 注意不要在此行增加逗号</span> <span> }), dataType: </span>"json"<span>, success: </span><span>function</span><span>(data) { $(</span>'#result'<span>).text(data.result); } </span><span>//</span><span> 注意不要在此行增加逗号</span> <span> }); }</span>
- 使用 $GLOBALS['HTTP_RAW_POST_DATA'] 后无法获取到数据,即
<span>$json</span> = <span>$GLOBALS</span>['HTTP_RAW_POST_DATA']; <span>//</span><span> empty($json) 为 1</span>
- 使用file_get_contents("php://input"); 可以获取数据,即
<span>$json</span> = <span>file_get_contents</span>("php://input"); <span>//</span><span> empty($json) 为 0</span>
情况B:
<p>js里加入属性contentType: "application/json; charset=utf-8",</p> <pre class="code"><span>var</span> submit_sync = <span>function</span><span>() { $.ajax({ type: </span>"post"<span>, url: </span>'add-post-json.php'<span>, async: </span><span>false</span>, <span>//</span><span> 使用同步方式</span> <span>//</span><span> 1 需要使用JSON.stringify 否则格式为 a=2&b=3&now=14...</span> <span>//</span><span> 2 需要强制类型转换,否则格式为 {"a":"2","b":"3"}</span> <span> data: JSON.stringify({ a: parseInt($(</span>'input[name="a"]'<span>).val()), b: parseInt($(</span>'input[name="b"]'<span>).val()), now: </span><span>new</span> Date().getTime() <span>//</span><span> 注意不要在此行增加逗号</span> <span> }), <span><strong>contentType: </strong></span></span><strong>"application/json; charset=utf-8"</strong><span><span><strong>,</strong></span></span>
<em id="__mceDel"><span> dataType: </span>"json"<span>, success: </span><span>function</span><span>(data) { $(</span>'#result'<span>).text(data.result); } </span><span>//</span><span> 注意不要在此行增加逗号</span> <span> }); }</span></em>
- 使用 $GLOBALS['HTTP_RAW_POST_DATA'] 后可以获取到数据,即
<span>$json</span> = <span>$GLOBALS</span>['HTTP_RAW_POST_DATA']; <span>//</span><span> empty($json) 为 0</span>
- 使用file_get_contents("php://input"); 可以获取数据,即
<span>$json</span> = <span>file_get_contents</span>("php://input"); <span>//</span><span> empty($json) 为 0</span>注:php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input 不能用于 enctype="multipart/form-data"。
情况C:
<p>是否加入以下</p> <pre class="code"><span>header</span>('Content-Type:application/json;charset=utf-8');
对情况A与情况B的结果没有任何影响。
从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码。下面这篇博客写的很详细,mark!
在PHP语言中使用JSON:http://www.ruanyifeng.com/blog/2011/01/json_in_php.html

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考虑使用AttActAcks.s.s.4)

会话再生是指在用户进行敏感操作时生成新会话ID并使旧ID失效,以防会话固定攻击。实现步骤包括:1.检测敏感操作,2.生成新会话ID,3.销毁旧会话ID,4.更新用户端会话信息。

PHP会话对应用性能有显着影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

phpientifiesauser'ssessionusessessionSessionCookiesAndSessionIds.1)whiwSession_start()被称为,phpgeneratesainiquesesesessionIdStoredInacookInAcookInamedInAcienamedphpsessidontheuser'sbrowser'sbrowser.2)thisIdAllowSphptptpptpptpptpptortoreTessessionDataAfromtheserverMtheserver。

PHP会话的安全可以通过以下措施实现:1.使用session_regenerate_id()在用户登录或重要操作时重新生成会话ID。2.通过HTTPS协议加密传输会话ID。3.使用session_save_path()指定安全目录存储会话数据,并正确设置权限。

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

记事本++7.3.1
好用且免费的代码编辑器