Recommandations associées : "Résumé des questions d'entretien PHP 2019 (collecte) "
1. Le mécanisme de collecte des ordures de PHP
La gestion de la mémoire PHP peut être effectué automatiquement et les objets inutiles effacés.
PHP utilise le mécanisme GC de comptage de références.
Chaque objet contient un compteur de référence refcount. Chaque référence est connectée à l'objet et le compteur est incrémenté de 1. Lorsque la référence quitte l'espace de vie ou est définie sur NULL, le compteur est décrémenté de 1. Lorsque le compteur de références d'un objet atteint zéro, PHP sait que vous n'avez plus besoin d'utiliser l'objet et libère l'espace mémoire qu'il occupe.
Référence : https://www.php.net/manual/zh/features.gc.refcounting-basics.php
2.
Différence :
1. Emplacement de stockage : La session est enregistrée sur le serveur, et le Cookie est enregistré sur le client.
2. Forme de stockage : La session est stockée sur le serveur sous la forme d'un objet, et le Cookie est stocké sur le client sous la forme d'une chaîne.
3. Objectif : les cookies conviennent à la sauvegarde des paramètres personnels, des loisirs, etc. des utilisateurs. Les sessions sont adaptées à l'authentification des clients.
4. Chemin : la session ne peut pas distinguer les chemins d'accès. a Sur le site Web, toutes les sessions sont accessibles de n'importe où. Si des paramètres de chemin sont définis dans les cookies, les cookies situés sous différents chemins sur le même site Web ne peuvent pas accéder les uns aux autres.
5. Sécurité : les cookies ne sont pas très sûrs. D'autres peuvent analyser le COOKIE stocké localement et procéder à une tromperie des COOKIES. Compte tenu de la sécurité, la session doit être utilisée
6. de cookies contenus dans le nom de domaine : IE7/8, FireFox : 50, Opera 30 ; Taille totale des cookies : Firefox et Safari autorisent les cookies jusqu'à 4 097 octets, Opera autorise les cookies jusqu'à 4 096 octets et Internet Explorer autorise les cookies jusqu'à 4 097 octets. 4095 octets ; on pense généralement que la session n’a pas de limite de taille ou de quantité.
Relation :
La session nécessite des cookies pour fonctionner correctement. Si le client désactive complètement les cookies, la Session sera invalide ! Étant donné que la session est un espace de stockage côté serveur géré par le serveur d'applications, lorsque l'utilisateur se connecte au serveur, un SessionID unique sera généré par le serveur et le SessionID est utilisé comme identifiant pour accéder à l'espace de stockage de session côté serveur. .
Les données SessionID sont enregistrées sur le client et stockées dans Cookie Lorsque l'utilisateur soumet la page, le SessionID sera soumis au serveur pour accéder aux données de session. Ce processus ne nécessite pas l'intervention du développeur. Ainsi, une fois que le client aura désactivé le cookie, la session deviendra également invalide.
3. Comment modifier le temps de survie de la SESSION
1. Définissez l'heure d'expiration de l'ID de session enregistrée par le navigateur setcookie (session_name (), session_id (), time. () + $lifeTime, "/");
2. Vous pouvez utiliser le session_set_cookie_params (86400) fourni avec SESSION pour définir la durée de vie de la session
3. session dans php.ini. La valeur du paramètre gc_maxlifetime peut modifier le temps de survie de la session
4 Quelles sont les méthodes de redirection de page PHP
header('Location: http://www.baidu.com/') ; echo ''; echo '';
. 5. Comparaison de la couche d'abstraction de base de données PDO, adoDB, PHPLib
La couche d'abstraction de base de données PHP fait référence au middleware entre le code du programme logique PHP et la base de données qui encapsule les opérations sous-jacentes de la base de données.
PDO est conçu sur la base de PHP 5.1. Il utilise le langage C pour le développement sous-jacent. La conception hérite des caractéristiques de PHP et est simple et facile à utiliser. À strictement parler, PDO doit être classé comme PHP 5. les bibliothèques SPL et ne doit pas être classée comme couche d'abstraction de données, car elle a des fonctions similaires à celles des bibliothèques d'extension MySQL et MySQLi. PDO ne convient pas pour une utilisation dans des systèmes où des modifications de la base de données sont prévues ou possibles.
ADODB La manière d'accéder à la base de données est la même quelle que soit la base de données back-end
Lors du transfert de la plateforme de base de données, le code du programme n'a pas besoin d'être trop modifié, en fait ; il suffit de le modifier dans le fichier de configuration de la base de données. Un grand nombre de méthodes d'assemblage sont fournies, dans le but de traduire ces instructions en bas de la couche d'abstraction pour différentes bases de données afin de s'adapter aux différents dialectes de bases de données !
Mais cette couche d'abstraction semble être trop grande. La taille totale du fichier est d'environ 500 Ko. Si vous créez un petit site Web, cela semble excessif.
PHPLib peut être fourni. PHP. La couche d'abstraction de base de données la plus ancienne (mais comparée à ADODB, il ne s'agit que d'une bibliothèque de classes abstraites MySQL. Cette classe abstraite est assez simple à utiliser et de petite taille. C'est un bon choix pour le développement de petits sites Web).
PDO fournit une requête d'instructions préparées, une gestion des erreurs et des exceptions, une acquisition flexible des résultats de requête (renvoi de tableaux, chaînes, objets, fonctions de rappel), un filtrage de caractères pour empêcher les attaques SQL, le traitement des transactions et des procédures stockées.
ADODB prend en charge les requêtes mises en cache, les jeux d'enregistrements mobiles (HTML, pagination, génération de menus de sélection), le traitement des transactions et la sortie vers des fichiers.
Référence : http://apps.hi.baidu.com/share/detail/463678
6. La différence et l'utilisation d'une connexion longue et d'une connexion courte
Connexion longue : le client et le serveur établissent d'abord une connexion. Une fois la connexion établie, il n'est pas déconnecté, puis envoie et reçoit des messages. De cette façon, la connexion de communication existe toujours. Cette méthode est souvent utilisée pour la communication P2P.
Connexion courte : le client et le serveur ne communiquent entre eux que pour chaque transaction d'envoi et de réception de message, et la connexion est immédiatement déconnectée une fois la transaction terminée. Cette méthode est souvent utilisée pour la communication point à multipoint. Communication C/S.
Durée d'utilisation d'une connexion longue et d'une connexion courte :
Connexion longue :
La connexion courte est principalement utilisée pour les opérations fréquentes, la communication point à point et le nombre de les connexions ne peuvent pas être trop nombreuses. L'établissement de chaque connexion TCP nécessite trois poignées de main et la déconnexion de chaque connexion TCP nécessite quatre poignées de main. Si vous devez établir une connexion pour chaque opération puis opérer à nouveau, la vitesse de traitement sera réduite. Il suffit donc d'envoyer directement des données lors de chaque opération et de l'opération suivante sans établir de connexion TCP. Par exemple : des connexions longues sont utilisées pour les connexions à la base de données. Des communications fréquentes avec des connexions courtes entraîneront des erreurs de socket. La création fréquente de sockets est également un gaspillage de ressources.
Connexion courte :
Les services http des sites web utilisent généralement des connexions courtes. Car les connexions longues consomment une certaine quantité de ressources pour le serveur. Avec des milliers, voire des centaines de millions de connexions client, comme les sites Web, qui sont si fréquentes, l'utilisation de connexions courtes peut économiser certaines ressources. Imaginez simplement si de longues connexions sont utilisées et que des milliers d'utilisateurs sont utilisés en même temps et que chaque utilisateur occupe une connexion, vous pouvez imaginer la pression qu'aura le serveur. Par conséquent, le degré de concurrence est important, mais chaque utilisateur a besoin d'une connexion courte s'il n'a pas besoin d'opérations fréquentes.
7. Explication détaillée et application du protocole HTTP
http (Hypertext Transfer Protocol) est une connexion apatride, courte, flexible, le protocole de couche application est souvent basé sur la méthode de connexion TCP.
Référence : //m.sbmmt.com/faq/437523.html (explication détaillée du protocole http)
(Code d'état de la réponse HTTP)
Code d'état de la réponse HTTP
Le code d'état se compose de trois chiffres. Le premier numéro définit la catégorie de réponse et a cinq valeurs possibles :
1xx : informations d'instruction - représente la demande. a été reçu, continuez le traitement
2xx : Succès - Indique que la demande a été reçue, comprise et acceptée avec succès
3xx : Redirection - Des opérations supplémentaires doivent être effectuées pour terminer la demande
4xx : Erreur côté client -- la demande contient une erreur de syntaxe ou la demande ne peut pas être satisfaite
5xx : Erreur côté serveur -- le serveur n'a pas réussi à répondre à une demande légitime
Codes d'état courants, statut Description et explication :
200 OK // Demande du client réussie
400 Mauvaise demande // La demande du client comporte une erreur de syntaxe et ne peut pas être comprise par le serveur
401 Non autorisé / / La demande n'est pas autorisée, ce code d'état doit être utilisé avec le champ d'en-tête WWW-Authenticate 403 Forbidden // Le serveur a reçu la demande, mais a refusé de fournir le service
404 Not Found // La ressource demandée n'existe pas, par exemple : saisissez une mauvaise URL
500 Internal Server Error // Une erreur inattendue s'est produite sur le serveur
503 Server Unavailable // Server timeout / / Peut revenir à la normale
304 Non modifié / / La page web demandée n'a pas été modifiée depuis la dernière demande.
// Lorsque le serveur renvoie cette réponse, il ne renverra pas le contenu de la page Web.
8. Schéma de cryptage des communications dans les communications de systèmes hétérogènes
Référence : //m.sbmmt.com/php-weizijiaocheng-437530. 🎜>
9. Étapes de connexion du socket
Concept du socketLe socket est la pierre angulaire de la communication, est l'unité d'exploitation de base prenant en charge la communication réseau de TCP /IP protocole. Il s'agit d'une représentation abstraite du point final dans le processus de communication réseau et contient cinq types d'informations nécessaires à la communication réseau : le protocole utilisé pour la connexion, l'adresse IP de l'hôte local, le port de protocole du processus local, l'adresse IP. de l'hôte distant et le protocole du port du processus distant. Processus de connexion par socketL'établissement d'une connexion Socket nécessite au moins une paire de sockets, dont l'une s'exécute sur le client, appelée ClientSocket, et l'autre s'exécute sur le serveur, appelée ServerSocketLe processus de connexion entre les sockets peut être divisé en trois étapes : surveillance du serveur, demande du client et confirmation de la connexion. Surveillance du serveur : le socket côté serveur ne localise pas le socket client spécifique, mais est en état d'attente de connexion et surveille l'état du réseau en temps réel. Demande client : fait référence à une demande de connexion faite par le socket du client, et la cible à connecter est le socket du serveur. Pour ce faire, le socket du client doit d'abord décrire le socket du serveur auquel il souhaite se connecter, indiquer l'adresse et le numéro de port du socket côté serveur, puis faire une demande de connexion au socket côté serveur. Confirmation de connexion : signifie que lorsque le socket côté serveur écoute ou reçoit la demande de connexion du socket client, il répond au client
Demande de socket, établissez un nouveau thread et envoyez la description du socket côté serveur au client Une fois que le client confirme cette description, la connexion est établie. Le socket côté serveur reste à l’état d’écoute et continue de recevoir des demandes de connexion d’autres sockets clients.
10. Protocole TCP, poignée de main à trois voies, vague à quatre voies
Le protocole TCP (Transmission Control Protocol) est un protocole de contrôle de transmission de couche hôte à hôte. , fournissant des connexions fiables. Le service utilise une poignée de main à trois voies pour confirmer l'établissement d'une connexion et une poignée de main à quatre voies pour se déconnecter. Le code binaire
est le drapeau tcp, et il existe 6 types de marques :
SYN (établissement de connexion synchrone) synchrone
ACK (confirmation d'accusé de réception)
PSH (transfert push)
FIN (terminer fin)
RST (réinitialisation réinitialiser)
URG (urgent urgent)
11. php medium Différenciation et exemples de fonctions couramment utilisées avec des fonctions similaires mais des performances très différentes
Référence : http://apps.hi.baidu.com/share/detail/43169774
12. Comparaison des regex compatibles Posix et Perl et analyse des performances des fonctions
Les différences les plus significatives entre les regex POSIX et les regex PCRE que vous devez connaître :
1 La fonction PCRE nécessite un motif pour séparer la fermeture des caractères.
2. Les expressions régulières compatibles POSIX n'ont pas de modificateur. Contrairement à POSIX, l'extension PCRE n'a pas de fonctions dédiées pour la correspondance insensible à la casse. Au lieu de cela, le support utilise le modificateur de mode /i pour accomplir le même travail. D'autres modificateurs de modèle peuvent également être utilisés pour modifier la stratégie de correspondance.
3. La fonction POSIX recherche la correspondance la plus longue en commençant par l'extrême gauche, mais PCRE s'arrête après la première correspondance légale. Cela ne fait aucune différence si les cordes ne correspondent pas
, mais si elles correspondent, il y aura une différence de résultats et de vitesse. Pour illustrer la différence, considérons l'exemple suivant (extrait du livre Mastering Regular Expressions de Jeffrey Friedl). En utilisant le modèle one (self) ? (selfsuffisant) pour faire correspondre la chaîne, PCRE se correspondra soi-même, mais en utilisant POSIX, le résultat sera la chaîne entière se suffit à elle-même. Les deux sous-chaînes correspondent à la chaîne d'origine, mais POSIX prendra le plus de temps comme résultat
PCRE Modificateurs disponibles : (i,s,m)
13. Implémentez les expressions régulières PERL et capturez tous les hyperliens href de la balise a des fichiers html
Expression régulière : /
]/est
$html = <<
HTML;
$matches = array();
preg_match_all ( "/]/is", $html, $matches ); print_r ($matches [1]); // Afficher tous les hyperliens
?>
14. Comparaison des variables prédéfinies, des variables magiques, des méthodes magiques et des exemples de leurs fonctions
Variables prédéfinies (super variables globales)
$GLOBALS
$_SERVER
$_GET
$_POST
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
Méthode magique http://apps.hi.baidu.com/share/detail/17851228
construire et détruire
__autoload
obtenir et définir
isset et désarmer
appeler et callStatic
__clone
__toString
veiller et se réveiller
__invoke
Variable magique http://apps.hi.baidu.com/share/detail/17851228
LINE
FILE
DIR
CLASS
FUNCTION
METHOD
NAMESPACE
15.
16. Modèles de conception PHP
Modèle d'usine
Créer une usine (une fonction ou une méthode de classe) pour créer de nouveaux objets
Factory pattern est une classe qui possède certaines méthodes qui créent des objets pour vous. Vous pouvez utiliser une classe d'usine pour créer des objets sans utiliser directement new. De cette façon, si vous souhaitez changer le type d’objet créé, il vous suffit de changer d’usine. Tout le code utilisant cette usine est automatiquement modifié.
Modèle Singleton
Certaines ressources d'application sont exclusives car il n'existe qu'une seule ressource de ce type. Par exemple, les connexions à une base de données via un handle de base de données sont exclusives. Vous souhaitez partager le handle de base de données dans votre application car cela représente une surcharge lors du maintien de la connexion ouverte ou fermée, encore plus pendant le processus de récupération d'une seule page.
Le mode élément unique peut répondre à cette exigence.
Le modèle singleton en PHP : fait référence à la création d'une seule instance d'une classe spécifiée dans le cadre d'une application PHP.
Les classes utilisant le modèle singleton en PHP ont généralement un constructeur privé et une fonction de clonage privé pour empêcher les utilisateurs de l'instancier en créant un objet ou en le clonant. Il existe également une variable membre privée statique $instance et une méthode statique getInstance. getInstance est chargé de s'instancier, puis de stocker cet objet dans la variable membre statique $instance pour garantir qu'une seule instance est créée.
Mode observateur
Mode chaîne de commande
Mode stratégie
17.
Guide d'équilibrage de charge avec PHPVous réfléchissez à la façon de gérer les problèmes suivants ?参考://m.sbmmt.com/php-weizijiaocheng-437532.html
在 Apache 负载均衡的情况下,做 PHP 开发如何考虑一下几方面:
PHP 源文件在服务器、PHP 文件上传处理、相关配置文件、Session 会话放置、日志放置
Apache 负载均衡的原则
轮询均衡策略 (轮询转发请求)
按权重分配均衡策略 (按响应数量转发请求)
权重请求响应负载均衡策略 (按响应流量转发请求)
18. 如何优化前端性能
1) 页面内容的优化
a) 降低请求数
合并 css、js 文件,集成 CSS 图片
b) 减少交互通信量
压缩技术:压缩 css、js 文件,优化图像,减少 cookie 体积;
合理利用缓存:使用外部 js/css 文件,缓存 ajax;
减少不必要的通信量:剔除无用脚本和样式、推迟加载内容、使用 GET 请求
c) 合理利用 “并行” 尽量避免重定向
慎用 Iframe 样式表置于顶部 脚本放到样式后面加载
d) 节约系统消耗
避免 CSS 表达式、滤镜
2) 服务器的优化
a) b)
c)
d)
19. yahoo 的 34 条前端优化法则
减少 HTTP 请求、利用 CDN 技术、 设置头文件过期或者静态缓存、Gzip 压缩、把 CSS 放顶部、 把 JS 放底部、避免 CSS 表达式、将 JS 和 CSS 外链、减少 DNS 查找、减小 JS 和 CSS 的体积、 避免重定向、删除重复脚本、 配置 ETags、缓存 Ajax、尽早的释放缓冲、
用 GET 方式进行 AJAX 请求、延迟加载组件、 预加载组件、减少 DOM 元素数量、跨域分离组件、
减少 iframe 数量、不要出现 404 页面、减小 Cookie、 对组件使用无 Cookie 的域名、减少 DOM 的访问次数、开发灵活的事件处理句柄、使用 而非 @import、避免过滤器的使用、优化图片、优化 CSS Sprites、 不要在 HTML 中缩放图片、缩小 favicon. ico 的大小并缓存它、保证组件在 25K 以下、将组件打包进一个多部分的文档中
20. 数据库缓存的基本理论,参考 memcached
什么是 Memcached?
memcached 是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。
虽然 memcached 使用了同样的 “Key=>Value” 方式组织数据,但是它和共享内存、APC 等本地缓存有非常大的区别。Memcached 是分布式的,也就是说 它不是本地的。它基于网络连接(当然它也可以使用 localhost)方式完成服务,本身它是一个独立于应用的程序或守护进程(Daemon 方式)
PHP 与 Memcached
Memcached 使用 libevent 库实现网络连接服务,理论上可以处理无限多的连接,但是它和
基于反向代理的 Web 缓存;
基于反向代理的 Web 缓存
21. PHP 安全模式
php 安全模式:safe_mode=on|off
启用 safe_mode 指令将对在共享环境中使用 PHP 时可能有危险的语言特性有所限制。可以将 safe_mode 是指为布尔值 on 来启用,或者设置为 off 和脚本尝试访问的文件的 UID,以此作为限制机制的基础。如果 UID 相同,则执行脚本;否则,脚本失败。
当启用安全模式时,一些限制将生效
1、 所有输入输出函数(例如 fopen ()、file () 和 require ())的适用会受到限制,只能用于与调用这些函数的
脚本有相同拥有者的文件
2、 如果试图通过函数 popen ()、system () 或 exec () 等执行脚本,只有当脚本位于 safe_mode_exec_dir
配置指令指定的目录才可能
3、HTTP 验证得到进一步加强,因为验证脚本用于者的 UID 划入验证领域范围内。此外,当启用安
全模式时,不会设置 PHP_AUTH。
4、如果适用 MySQL 数据库服务器,链接 MySQL 服务器所用的用户名必须与调用 mysql_connect ()
的文件拥有者用户名相同。
以下是一些和安全模式相关的配置选项
safe_mode_gid=on|off safe_mode_include_dir=string safe_mode_env_vars=string safe_mode_exec_dir=string safe_mode_protected_env_vars=string
22. 常见的 web 攻击方式
常见攻击
XSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往 Web 页面里插入恶意 html 代码,当用户浏览该页之时,嵌入的恶意 html 代码会被执行,从而达到恶意用户的特殊 目的。
XSS est une attaque passive Parce qu'elle est passive et difficile à exploiter, de nombreuses personnes ignorent souvent sa nocivité. Cependant, avec l'avancement continu de la technologie frontale et le nombre croissant d'applications de clients riches, cette question a attiré de plus en plus d'attention.
Un exemple simple :
Si vous êtes actuellement un utilisateur sur le site sns et qu'il existe une vulnérabilité dans la fonction de publication d'informations, vous pouvez exécuter js si vous entrez un script malveillant. à ce moment-là, tous ceux qui vous voient actuellement le feront. Les navigateurs des personnes qui reçoivent de nouvelles informations exécuteront ce script pour faire apparaître une boîte de dialogue (annonces pop-up très sympas :)). Si vous faites quelque chose de plus radical, les conséquences seront. être inimaginable.
CSRF (Cross Site Request Forgery), falsification de requêtes cross-site. Comme son nom l'indique, il permet aux utilisateurs d'utiliser leur propre identité pour atteindre certains des objectifs que l'attaquant doit atteindre en forgeant des demandes de connexion à l'insu de l'utilisateur. L'attaque de csrf est différente de celle de xss csrf qui doit être déclenchée par le comportement actif de l'attaquant. On dirait qu'il y a une suspicion de "pêche".
Les navigateurs multi-fenêtres semblent contribuer à la tyrannie à cet égard, car la nouvelle fenêtre ouverte contient toutes les sessions en cours. S'il s'agit d'une seule fenêtre de navigateur similaire à IE6, il n'y aura pas de problème de ce type, car chacune d'entre elles. time Chaque fenêtre est un processus indépendant.
Donnez-moi un exemple simple : vous jouez à White Society et vous voyez quelqu'un envoyer un lien. Vous cliquez dessus, puis un formulaire d'envoi de cadeaux est forgé dans ce lien. Ce n'est qu'un exemple simple. .Le problème Visible général.
Détournement de cookies. En obtenant les autorisations de la page, écrivez une simple demande au site malveillant dans la page et transportez le cookie de l'utilisateur. Après avoir obtenu le cookie, vous pouvez vous connecter directement au site en tant qu'utilisateur volé via le cookie. Il s'agit d'un détournement de cookies.
Un exemple simple : quelqu'un a écrit un journal très intéressant et l'a ensuite partagé avec tout le monde. De nombreuses personnes ont cliqué pour voir et partagé le journal. Tout semblait normal, mais la personne qui a écrit le journal ne l'a pas fait. une demande de sortie du site est secrètement cachée dans le journal. Ensuite, toute personne qui lit ce journal enverra son cookie à quelqu'un sans le savoir, et pourra ensuite le transmettre à n'importe qui pour se connecter au compte de cette personne.
Attaque par injection SQL
Dans une attaque par injection SQL, l'utilisateur ajoute des informations à une requête de base de données en manipulant un formulaire ou une chaîne de requête GET.
Attaque DNS
Attaque par déni de service
L'attaque par déni de service signifie que l'attaquant tente d'empêcher la machine cible de fournir des services. C'est l'une des méthodes d'attaque courantes. utilisé par les pirates.
L'attaquant effectue une attaque par déni de service, qui permet en fait au serveur d'obtenir deux effets : l'un est de forcer le tampon du serveur à être plein et de ne pas accepter de nouvelles requêtes ; l'autre est d'utiliser l'usurpation d'adresse IP pour le faire ; forcer le serveur à détourner les connexions des utilisateurs légitimes Réinitialiser, affectant la connexion des utilisateurs légitimes
23. L'idée de base d'empêcher les hotlinking dans PHP Anti-hotlinking
Qu’est-ce que le hotlinking ?
Les liens dynamiques font référence à du contenu pour lequel le fournisseur de services lui-même ne fournit pas de services. Il utilise des moyens techniques pour contourner d'autres interfaces utiles pour l'utilisateur final (telles que les publicités) et fournir directement d'autres services aux utilisateurs finaux sur son propre site Web. . Le contenu des services du fournisseur est fraudé des taux de navigation et de clics des utilisateurs finaux. Le bénéficiaire ne fournit pas ou très peu de ressources, tandis que le véritable prestataire de services ne reçoit aucun avantage.
Le hotlinking du site Web consommera une grande partie de la bande passante du site Web du lien volé, et le taux de clics réel peut être très faible, ce qui nuira gravement aux intérêts du site Web du lien volé. Comment empêcher les hotlinks ?
Renommer des fichiers ou des répertoires de temps en temps
Restreindre les pages de référence
Le principe est que le serveur obtient l'adresse du site Web des informations soumises par l'utilisateur, puis la compare avec la véritable adresse du serveur. Si elles sont cohérentes, cela signifie qu'elle a été soumise au sein du site ou pour un site en qui vous avez confiance, sinon elle sera considérée comme un lien actif. Lors de l'implémentation, vous pouvez utiliser les fichiers HTTP_REFERER1 et htaccess (mod_Rewrite doit être activé), combinés avec des expressions régulières pour correspondre à chaque demande d'accès de l'utilisateur.
Camouflage de fichiers
Le camouflage de fichiers est actuellement la technologie anti-sangsue la plus couramment utilisée, généralement associée à des scripts dynamiques côté serveur (PHP/JSP/ASP). En fait, l'adresse de fichier demandée par l'utilisateur n'est qu'un fichier de script déguisé. Ce fichier de script authentifiera la demande de l'utilisateur et vérifiera généralement Session, Cookie ou HTTP_REFERER comme base pour déterminer s'il s'agit d'un lien hypertexte. Les vrais fichiers sont en fait cachés dans des endroits auxquels les utilisateurs ne peuvent pas accéder. Ce n'est qu'une fois que l'utilisateur a réussi la vérification qu'ils seront restitués à l'utilisateur
Authentification cryptée
Cette méthode anti-sangsue est d'abord obtenue à partir de le client Les informations utilisateur sont ensuite cryptées dans une chaîne (ID de session) basée sur ces informations et le nom de fichier demandé par l'utilisateur comme authentification. Ce n'est qu'une fois l'authentification réussie que le serveur enverra les fichiers requis par l'utilisateur au client. Généralement, nous transmettrons l'ID de session crypté au serveur dans le cadre des paramètres d'URL. Étant donné que cet ID de session est lié aux informations de l'utilisateur, même si quelqu'un d'autre vole le lien, l'ID de session ne peut pas passer l'authentification d'identité, obtenant ainsi un anti-vol. -sangsue. Cette méthode est très efficace pour les liens dynamiques distribués.
Code supplémentaire aléatoire
每次,在页面里生成一个附加码,并存在数据库里,和对应的图片相关,访问图片时和此附加码对比,相同则输出图片,否则输出 404 图片
加入水印
24. HTTP 请求头信息和响应头信息
请求头信息
POST /scp1.1.0/prs/new_rnaseqtask/run_go HTTP/1.1 Host: 172.30.4.102 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0 Accept: / Accept-Language: zh-cn,zh;q=0.5 Accept-Encoding: gzip, deflate Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7 Connection: keep-alive Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequest Referer: http://172.30.4.102/scp1.1.0/index.php/prs... Content-Length: 1819 Cookie: ci_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22e31556053ff9407a454f6a1e146d43eb%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A12%3A%22172.16.23.42%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A50%3A%22Mozilla%2F5.0+%28Windows+NT+6.1%3B+rv%3A6.0%29+Gecko%2F2010010%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1314955607%3B%7D664b51a01ef99bac95f3e2206e79cb00;PHPSESSID=v33mlm1437lmop1fquta675vv4;username=linjinming; tk=1314955601855 Pragma: no-cache Cache-Control: no-cache
响应头信息
HTTP/1.1 200 OK Date: Fri, 02 Sep 2011 09:27:07 GMT Server: Apache/2.2.3 (Red Hat) X-Powered-By: PHP/5.1.6 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 31 Connection: close Content-Type: text/html; charset=UTF-8
25. MySQL
MySQL 数据库性能优化
使用 mysqlreport;
正确使用索引:explain 分析查询语句,组合索引,索引副作用(占空间、update)
开启慢查询日志、使用慢查询分析工具 mysqlsla;
索引缓存、索引代价(插入更新索引);
表锁,行锁,行锁副作用(update 多时候变慢),在 select 和 update 混合的情况下,行锁巧妙解决了读写互斥的问题;
开启使用查询缓存;
修改临时表内存空间;
开启线程池;
MySQL Query 语句优化的基本思路和原则
1、优化需要优化的 Query;
2、定位优化对象的性能瓶颈;
3、明确优化目标;
4、从 Explaing 入手;
5、多使用 Profile;
6、永远用小结果集推动大的结果集;
7、尽可能在索引中完成排序;
8、只取自己需要的 Columns;
9、仅仅使用最有效的过滤条件;
10、尽可能避免复杂的 Join 和子查询。
MySQL 中 MyISAM 引擎和 InnoDB 引擎的区别以及它们的性能
1:Innodb 支持事物,Myisam 不支持
2:锁定机制不一样,Myisam 支持表锁定,而 Innodb 支持行锁
3:Myisam 不支持外键,Innodb 能支持
4:Myisam 能在特定环境下支持全文索引,而 Innodb 不支持
5:Myisam 支持数据压缩,Innodb 不支持
6:在数据存储上,Myisam 占用的空间少,Innodb 相对多些
7:Myisam 在批量插入和查询方面速度上有优势,而 Innodb 由于支持行锁,所以在数据修改方面更胜一筹
MySQL 存储引擎
MyISAM:不支持事务、表锁和全文索引,操作速度快
InnoDB:行锁设计、支持外键、支持安全事务
HEAP:数据存放在内存中,临时表
NDB Cluster:MySQL 的簇式数据库引擎
CSV: 存储引擎把数据以逗号分隔的格式存储在文本文件中。
FEDERATED:存储引擎表并不存放数据,它只是指向一台远程 MySQL 数据库服务器上的表 Archive: 只支持 INSERT 和 SELECT 操作,压缩后存储,非常适合存储归档数据
Merge:允许将一系列等同的 MyISAM 表以逻辑方式组合在一起,并作为 1 个对象引用它们 表类型,区分表类型
优化表设计的常用思路
负载均衡的数据库设计
数据类型及详细定义,区分
26. Apache
性能优化,配置,fastCGI 等几种工作模式
27. Ajax
用 JS 实现 Ajax 功能
var createXHR = function(){ } var addURLParam = function(url, name, value){ } var xhr = createXHR(); xhr.onreadystatechange = function(){ } var url = 'testAjax.php'; addURLParam(url, 'name', 'linjm'); xhr.open('get',url,true); xhr.send(NULL); if(xhr.readyState == 4){ } if(xhr.status > 200 && xhr.status < 300 || xhr.status == 304){ } alert(xhr.responseText); url += (url.indexOf('?') == -1 ? '?' : '&'); url += encodeURIComponent(name) + '=' + encodeURIComponent(value); return url; if(window.XMLHttpRequest){ } return new XMLHttpRequest(); return new ActiveXObject('Microsoft.XMLHTTP'); throw new Error('No XMLHttpRequest available'); }else{ }else{}
28. Javascript
变量、作用域、作用域链.