2009-08-26 8 views
2

Disons que j'ai les pages suivantes:ASP - Déterminer si le script en cours est en cours d'exécution comme un include

# Include.asp 
<% 
Response.Write IsIncluded() & "<br>" 

%> 

# Outside.asp 
<!--#include file="Include.asp" --> 

Je en ai besoin pour travailler de telle sorte que si j'accéder directement à http://Example.com/Include.asp, je vois « vrai », mais si j'accède http://Example.com/Outside.asp je vois Faux. Je préfère ne pas devoir ajouter quelque chose à Outside.asp. Quelqu'un peut-il penser à un moyen de créer une telle fonction IsIncluded dans ASP? J'ai été capable de créer une telle fonction en PHP en comparant __FILE__ à $ _SERVER ['PHP_SELF'], mais ça ne marchera pas ici parce que ASP n'a pas quelque chose comme __FILE__ que je connais.

Répondre

1

Essayez de vérifier l'URL demandée et faites-la correspondre à l'inclusion. Exemple fourni en JavaScript

function IsIncluded() { 
    var url = String(Request.ServerVariables("URL")); 
    url = url.substring(0, url.indexOf("?")).substring(0, url.indexOf("#")).substr(url.lastIndexOf("/")); 
    return (url == "Include.asp") 
} 
+0

Cela fonctionne si j'ai une fonction qui retourne la chaîne "Inclue.asp", ce que je ne ... Peut-être finir par faire quelque chose de similaire, car je ne suis pas sûr qu'une telle chose soit possible. –

+0

Une chance est de jeter une exception et de l'attraper, puis appelez Server.GetLastError http://www.w3schools.com/asp/asp_ref_error.asp – Rodrigo

+0

@DrFredEdison: Je ne suis pas sûr de comprendre cette déclaration "Cela fonctionne si j'ai une fonction qui retourne la chaîne "Inclue.asp", ce que je ne fais pas "?? Pourquoi aurait besoin d'une "fonction" pour retourner "Include.asp", le code proposé existerait dans le fichier Include.asp, tout ce qui est nécessaire est alors pour le fichier include d'avoir une chaîne littérale qui correspond à son propre nom. – AnthonyWJones

0

En général, dans son ASP pas une bonne pratique d'avoir un fichier à inclure également disponible quelque chose qui peut être récupéré par le client. Si vous voulez empêcher le client d'extraire un fichier include, placez-le dans un dossier (appelé "Includes"), puis bloquez l'accès à ce dossier dans IIS. OTH Si vous voulez que l'utilisateur puisse accéder au fichier d'inclusion à peu près tel quel et permettre à d'autres pages de l'inclure, créez une page "hôte" pour l'inclusion. E.g.:-

# /Includes/Include.asp 
<% 
%> 

# IncludeHost.asp 
<!-- #include virtual="/Includes/Include.asp" --> 

# Outside.asp 
<!-- #include virtual="/Includes/Include.asp" --> 
<% 
    '' #Other content/code here 
%> 

Vous pouvez maintenant déplacer le code et le contenu uniques à « Include.asp » quand il était en cours d'accès directement au fichier IncludeHost.asp.

Questions connexes