ΚΕΝΤΡΟ ΠΛΗ.ΝΕ.Τ. Ν. ΦΛΩΡΙΝΑΣ

Η Γλώσσα Προγραμματισμού ASP

 

Τι Είναι η ASP

Η γλώσσα προγραμματισμού ASP (Active Server Pages) έχει το ιδιαίτερο χαρακτηριστικό ότι ο κώδικάς της πρώτα μεταγλωττίζεται στον server και μετά φορτώνεται σαν ένα κανονικό html έγγραφο, χωρίς ο χρήστης να είναι σε θέση να δει τον αρχικό κώδικα. Με την τεχνολογία της ASP μπορούμε να δημιουργήσουμε δυναμικές ιστοσελίδες (dynamic web pages).

Ανταγωνιστικές της τεχνολογίας ASP είναι η τεχνολογία Php (HyperText PreProcessor) καθώς και η τεχνολογία CFML (ColdFusion Markup Language).

 

Τι Είναι ένα Αρχείο ASP

 

Πώς Δουλεύει ένα Αρχείο ASP

 

Τι Μπορεί να Κάνει η ASP για μας

 

Σύνταξη της ASP

Δεν μπορούμε να δούμε τον ASP κώδικα σ’ έναν φυλλομετρητή, αλλά μόνο την έξοδο από την ASP, που είναι απλή HTML. Και αυτό γιατί τα scripts εκτελούνται στον server πριν σταλεί το αποτέλεσμα στον φυλλομετρητή.

Παραδείγματα

Εμφάνιση Κειμένου

Πώς να γράψουμε κάποιο κείμενο στο τμήμα <body> του HTML εγγράφου με την ASP.

<html>

<body>

<%

response.write"Hello World!"

%>

</body>

</html>

Κείμενο και HTML tags

Πώς να μορφοποιήσουμε το κείμενο με HTML tags.

<html>

<body>

<%

response.write("<h2> Hello World! <br> Αυτή η πρόταση

χρησιμοποιεί HTML tags για να μορφοποιήσει το κείμενο!

</h2>")

%>

</body>

</html>

 

Ο Βασικός Κανόνας Σύνταξης της ASP

Ενα αρχείο ASP περιέχει κανονικά HTML tags, όπως ένα κανονικό αρχείο HTML. Επιπλέον, ένα αρχείο ASP μπορεί να περιέχει server scripts, που περικλείονται από τους οριοθέτες (delimiters) <% και %>. Τα server scripts εκτελούνται στον server και μπορούν να περιέχουν οποιεσδήποτε εκφράσεις, εντολές, διαδικασίες ή τελεστές που είναι έγκυροι για τη γλώσσα συγγραφής που χρησιμοποιούμε.

 

Το Αντικείμενο Response

Η μέθοδος Write του αντικειμένου Response της ASP χρησιμοποιείται για να σταλεί περιεχόμενο (content) στον φυλλομετρητή. Για παράδειγμα, η επόμενη εντολή στέλνει το κείμενο Hello World στον φυλλομετρητή :

Response.Write("Hello World")

 

Η VBScript

Στην ASP μπορούμε να χρησιμοποιήσουμε διάφορες γλώσσες συγγραφής (scripting languages). Η προκαθορισμένη είναι η γλώσσα VBScript, όπως φαίνεται στο επόμενο παράδειγμα :

<html>

<body>

<%

response.write("Hello World!")

%>

</body>

</html>

Το παράδειγμα αυτό χρησιμοποιεί τη συνάρτηση response.write για να εμφανίσει το μήνυμα Hello World! στο τμήμα <body> του HTML εγγράφου.

 

Η JavaScript

Για να χρησιμοποιήσουμε την JavaScript σαν την προκαθορισμένη γλώσσα συγγραφής, εισάγουμε την εξής εντολή (language specification) στην κορυφή της σελίδας :

<%@ language="javascript" %>

<html>

<body>

<%

Response.Write("Hello World!")

%>

</body>

</html>

Πρέπει να έχουμε υπόψη μας ότι σ’ αντίθεση με την VBScript, η JavaScript ξεχωρίζει τα πεζά από τα κεφαλαία γράμματα (case sensitive). Ετσι, θα πρέπει να γράψουμε τον ASP κώδικα με κεφαλαία ή πεζά γράμματα ανάλογα με τις απαιτήσεις της γλώσσας.

 

Αλλες Γλώσσες Συγγραφής (Scripting Languages)

Η ASP δίνεται με τις γλώσσες συγγραφής VBScript και JavaScript. Αν θέλουμε να γράψουμε κώδικα σε μια άλλη γλώσσα, όπως Perl, REXX ή Python, θα πρέπει να εγκαταστήσουμε τις αντίστοιχες μηχανές συγγραφής (scripting engines). Επειδή τα scripts εκτελούνται στον server, ο φυλλομετρητής που ζητάει το αρχείο ASP δεν είναι ανάγκη να υποστηρίζει scripting.

 

Οι Μεταβλητές της ASP

Μια μεταβλητή (variable) που δηλώνεται εκτός μιας διαδικασίας (pro-cedure) μπορεί να αλλαχθεί από ένα οποιοδήποτε script του αρχείου ASP, ενώ μια μεταβλητή που δηλώνεται μέσα σε μια διαδικασία, δημιουργείται και χάνεται κάθε φορά που εκτελείται η διαδικασία.

Παραδείγματα

Δημιουργία Μεταβλητής

Αυτό το παράδειγμα δείχνει πώς μπορούμε να δημιουργήσουμε μια μεταβλητή, να της εκχωρήσουμε μια τιμή και μετά να εισάγουμε την τιμή της μεταβλητής σ’ ένα κείμενο.

<html>

<body>

<%

Dim name

name = "Παπαδόπουλος Μάκης"

response.write("Το όνομά μου είναι : " & name)

%>

</body>

</html>

Δημιουργία ενός Πίνακα

Αυτό το παράδειγμα δείχνει πώς μπορούμε να δημιουργήσουμε έναν πίνακα (array) που να περιέχει ονόματα.

<html>

<body>

<%

Dim famname(5)

famname(0) = "Παπαδόπουλος"

famname(1) = "Πατουλίδου"

famname(2) = "Σαπουντζής"

famname(3) = "Στυλιάδης"

famname(4) = "Σουμπάσης"

famname(5) = "Τζώτζης"

For i = 0 to 5

response.write(famname(i) & "<br>")

Next

%>

</body>

</html>

Βρόχος στις Επικεφαλίδες

Αυτό το παράδειγμα δείχνει πώς μπορούμε να κάνουμε βρόχο (loop) στα 6 είδη επικεφαλίδων (headers) ενός HTML εγγράφου.

<html>

<body>

<%

Dim i

for i = 1 to 6

response.write("<h" & i & "> Επικεφαλίδα " & i & "</h" & i &">")

next

%>

</body>

</html>

Χαιρετισμός με Χρήση της VBScript

Αυτό το παράδειγμα εμφανίζει ένα διαφορετικό μήνυμα ανάλογα με την ώρα του server.

<html>

<body>

<%

Dim h

h = hour(now())

response.write("<p>" & now())

response.write(" (Norwegian Time) </p>")

If h < 12 then

response.write("Good Morning!")

else

response.write("Good day!")

end if

%>

</body>

</html>

Χαιρετισμός με Χρήση της JavaScript

Αυτό το παράδειγμα είναι το ίδιο με το προηγούμενο αλλά με διαφορετική σύνταξη.

<%@ language="javascript" %>

<html>

<body>

<%

var d = new Date()

h = d.getHours()

Response.Write("<p>")

Response.Write(d + " (Norwegian Time)")

Response.Write("</p>")

if (h < 12)

{

Response.Write("Good Morning!")

}

else

{

Response.Write("Good day!")

}

%>

</body>

</html>

 

Χρόνος Ζωής των Μεταβλητών

Μια μεταβλητή που δηλώνεται έξω από μια διαδικασία, μπορεί να προσπελαστεί και να τροποποιηθεί από ένα οποιοδήποτε script της σελίδας ASP στην οποία δηλώνεται.

Μια μεταβλητή που δηλώνεται μέσα σε μια διαδικασία, δημιουργείται και χάνεται κάθε φορά που εκτελείται η διαδικασία. Κανένα script που βρίσκεται εκτός αυτής της συγκεκριμένης διαδικασίας δεν μπορεί να προσπελάσει ή να τροποποιήσει αυτή τη μεταβλητή.

Για να κάνουμε μια μεταβλητή προσπελάσιμη από πολλές σελίδες ASP, πρέπει να την δηλώσουμε σαν μεταβλητή session (συνόδου) ή σαν μεταβλητή application (εφαρμογής).

 

Οι Μεταβλητές Session

Οι μεταβλητές session (συνόδου) αποθηκεύουν πληροφορίες για έναν μόνο χρήστη και είναι διαθέσιμες σ’ όλες τις σελίδες μιας εφαρμογής. Οι κοινές πληροφορίες που αποθηκεύονται στις μεταβλητές session είναι το όνομα χρήστη (username) και ο κωδικός χρήστη (userid). Για να δημιουργήσουμε μια μεταβλητή session, την αποθηκεύουμε σ’ ένα Session Object.

 

Οι Μεταβλητές Application

Οι μεταβλητές application (εφαρμογής) είναι επίσης διαθέσιμες σ’ όλες τις σελίδες μιας εφαρμογής και χρησιμοποιούνται για να περιέχουν πληροφορίες γι’ όλους τους χρήστες σε μια συγκεκριμένη εφαρμογή. Για να δημιουργήσουμε μια μεταβλητή application, την αποθηκεύουμε σ’ ένα Application Object.

 

Οι Διαδικασίες (Procedures) της ASP

Στην ASP μπορούμε να καλέσουμε μια διαδικασία JavaScript από μια διαδικασία VBScript και το αντίστροφο.

Παραδείγματα

Κλήση Διαδικασίας με Χρήση της VBScript

Πώς να καλέσουμε μια διαδικασία VBScript από την ASP.

<html>

<head>

<%

sub vbproc(num1, num2)

response.write(num1*num2)

end sub

%>

</head>

<body>

<p>

Το αποτέλεσμα του υπολογισμού είναι :<%call vbproc(3, 4)%>

</p>

<p>

Ή μπορούμε να καλέσουμε μια διαδικασία ως εξής :

</p>

<p>

Το αποτέλεσμα του υπολογισμού είναι : <%vbproc 3, 4%>

</p>

</body>

</html>

Κλήση Διαδικασίας με Χρήση της JavaScript

Πώς να καλέσουμε μια διαδικασία JavaScript από την ASP.

<%@ language="javascript" %>

<html>

<head>

<%

function jsproc(num1, num2)

{

Response.Write(num1*num2)

}

%>

</head>

<body>

Το αποτέλεσμα του υπολογισμού είναι : <%jsproc(3, 4)%>

</body>

</html>

Κλήση Διαδικασιών με Χρήση της VBScript

Πώς να καλέσουμε μια JavaScript και μια VBScript διαδικασία από την ASP.

<html>

<head>

<%

sub vbproc(num1, num2)

Response.Write(num1*num2)

end sub

%>

<script language="javascript" runat="server">

function jsproc(num1, num2)

{

Response.Write(num1*num2)

}

</script>

</head>

<body>

Το αποτέλεσμα του υπολογισμού είναι : <%call vbproc(3, 4)%>

<br><br>

Το αποτέλεσμα του υπολογισμού είναι : <%call jsproc(3, 4)%>

</body>

</html>

Ο ASP κώδικας μπορεί να περιέχει διαδικασίες (procedures) και συναρτήσεις (functions) :

<html>

<head>

<%

sub vbproc(num1, num2)

response.write(num1*num2)

end sub

%>

</head>

<body>

Το αποτέλεσμα του υπολογισμού είναι : <%call vbproc(3, 4)%>

</body>

</html>

Πρέπει να εισάγουμε τη γραμμή <%@ language="language" %> πριν από το <html> tag αν θέλουμε να γράψουμε διαδικασίες ή συναρτήσεις σε μια γλώσσα συγγραφής διαφορετική από την προκαθορισμένη, που είναι η VBScript, ως εξής :

<%@ language="javascript" %>

<html>

<head>

<%

function jsproc(num1, num2)

{

Response.Write(num1*num2)

}

%>

</head>

<body>

Το αποτέλεσμα του υπολογισμού είναι : <%jsproc(3, 4)%>

</body>

</html>

 

Κλήση μιας Διαδικασίας

Οταν καλούμε μια διαδικασία VBScript ή JavaScript από μια σελίδα ASP που είναι γραμμένη σε VBScript, μπορούμε να χρησιμοποιήσουμε τη λέξη κλειδί call ακολουθούμενη από το όνομα της διαδικασίας. Αν μια διαδικασία απαιτεί παραμέτρους, η λίστα των παραμέτρων πρέπει να περικλείεται από παρενθέσεις όταν χρησιμοποιούμε τη λέξη κλειδί call.

Αν παραλείψουμε τη λέξη κλειδί call, η λίστα των παραμέτρων δεν πρέπει να περικλείεται από παρενθέσεις. Αν η διαδικασία δεν έχει παραμέτρους, οι παρενθέσεις είναι προαιρετικές. Όταν καλούμε μια διαδικασία JavaScript ή VBScript από μια σελίδα ASP που είναι γραμμένη σε JavaScript, πρέπει να χρησιμοποιούμε πάντα παρενθέσεις μετά από το όνομα της διαδικασίας.

 

Οι Φόρμες (Forms) στην ASP

Μπορούμε να πάρουμε πληροφορίες από μια φόρμα με τις εντολές Request.QueryString και Request.Form.

Παραδείγματα

Μια Φόρμα που Χρησιμοποιεί τη Μέθοδο GET

Αυτό το παράδειγμα δείχνει πώς να αλληλεπιδρούμε με τον χρήστη με την εντολή Request.QueryString.

<html>

<body>

<form action="demo_reqquery.asp" method="get">

Παρακαλώ, γράψτε το μικρό σας όνομα :

<input type="text" name="fname"><br><br>

<input type="submit" value="Submit">

</form>

<%

If Request.QueryString("fname")<>"" Then

Response.Write ("Γεια σας " &

Request.QueryString("fname") & "!")

Response.Write ("<br> Πώς είστε σήμερα;")

End If

%>

</body>

</html>

Μια Φόρμα που Χρησιμοποιεί τη Μέθοδο POST

Αυτό το παράδειγμα δείχνει πώς να αλληλεπιδρούμε με τον χρήστη με την εντολή Request.Form.

<html>

<body>

<form action="demo_simpleform.asp" method="post">

Παρακαλώ, γράψτε το μικρό σας όνομα :

<input type="text" name="fname">

<br>

<input type="submit" value="Submit">

</form>

<%

If Request.Form("fname")<>"" Then

Response.Write ("Γεια σας " & Request.Form("fname")

& "!")

Response.Write ("<br> Πώς είστε σήμερα;")

End If

%>

</body>

</html>

Μια Φόρμα με Πλήκτρα Επιλογής (Radio Buttons)

Αυτό το παράδειγμα δείχνει πώς να αλληλεπιδρούμε με τον χρήστη, μέσω πλήκτρων επιλογής, με την εντολή Request.Form.

<html>

<body>

<%

dim cars

cars = Request.Form("cars")

%>

<form action="demo_radiob.asp" method="post">

<p> Παρακαλώ επιλέξτε το αγαπημένο σας αυτοκίνητο:</p>

<input type="radio" name="cars"

<%if cars = "Volvo" then Response.Write("checked")%>

value="Volvo"> Volvo V70

<br>

<input type="radio" name="cars"

<%if cars = "Saab" then Response.Write("checked")%>

value="Saab"> Saab 95

<br>

<input type="submit" value="Submit">

</form>

<%

if cars<>"" then

Response.Write("<p> Το αγαπημένο σας αυτοκίνητο

είναι : " & cars & "</p>")

end if

%>

</body>

</html>

 

Είσοδος Χρήστη (User Input)

Για να πάρουμε πληροφορίες από τις φόρμες, μπορούμε να χρησιμοποιήσουμε το Request Object.

Ενα απλό παράδειγμα φόρμας :

<form method="get" action="../pg.asp">

First Name : <input type="text" name="fname"><br>

Last Name : <input type="text" name="lname"><br>

<input type="submit" value="Send">

</form>

Υπάρχουν δύο τρόποι για να πάρουμε πληροφορίες από μια φόρμα : η εντολή Request.QueryString και η εντολή Request.Form.

 

Η Εντολή Request.QueryString

Η εντολή Request.QueryString συλλέγει τις τιμές μιας φόρμας σαν κείμενο. Οι πληροφορίες που στέλνονται από μια φόρμα με τη μέθοδο GET είναι ορατές στον καθένα (στο πεδίο address). Πρέπει να έχουμε υπόψη μας ότι η μέθοδος GET περιορίζει την ποσότητα των πληροφοριών που μπορούν να σταλούν.

Αν ένας χρήστης γράψει Bill και Gates στη φόρμα του προηγούμενου παραδείγματος, το url που θα σταλεί στον server θα είναι σαν το εξής :

http://www.w3schools.com/pg.asp?fname=Bill&lname=Gates

Το αρχείο ASP pg.asp περιέχει το εξής script :

<body>

Welcome

<%

response.write(request.querystring("fname"))

response.write("&nbsp;")

response.write(request.querystring("lname"))

%>

</body>

Το παραπάνω παράδειγμα γράφει το εξής κείμενο στο τμήμα <body> ενός εγγράφου :

Welcome Bill Gates

 

Η Εντολή Request.Form

Για να συλλέξουμε τις τιμές μιας φόρμας με τη μέθοδο POST, χρησιμοποιούμε την εντολή Request.Form. Οι πληροφορίες που στέλνονται από μια φόρμα με τη μέθοδο POST δεν είναι ορατές στους άλλους. Η μέθοδος POST δεν έχει όρια, έτσι μπορούμε να στείλουμε πολλές πληροφορίες.

Αν ένας χρήστης γράψει Bill και Gates στη φόρμα του προηγούμενου παραδείγματος, το url που θα σταλεί στον server θα είναι σαν το εξής :

http://www.w3schools.com/pg.asp

Το αρχείο ASP pg.asp περιέχει το εξής script :

<body>

Welcome

<%

response.write(request.form("fname"))

response.write("&nbsp;")

response.write(request.form("lname"))

%>

</body>

Το παραπάνω παράδειγμα γράφει το εξής κείμενο στο τμήμα <body> ενός εγγράφου :

Welcome Bill Gates

 

Επικύρωση Φόρμας (Form Validation)

Η είσοδος μιας φόρμας πρέπει να επικυρωθεί στον φυλλομετρητή από scripts που είναι γραμμένα στην πλευρά του πελάτη (client side scripts). Η επικύρωση φυλλομετρητή έχει έναν ταχύτερο χρόνο απόκρισης και μειώνει τον φόρτο στον server.

Πρέπει να χρησιμοποιούμε την επικύρωση server (server validation) αν η είσοδος από μια φόρμα εισάγεται σε μια βάση δεδομένων. Ένας καλός τρόπος για να επικυρώσουμε τη φόρμα σ’ έναν server είναι να στείλουμε (post) τη φόρμα στον εαυτό της, αντί σε μια διαφορετική σελίδα. Ο χρήστης θα λάβει τότε τα μηνύματα λάθους στην ίδια σελίδα με τη φόρμα. Αυτό κάνει ευκολότερο τον εντοπισμό των λαθών.

 

Τα ASP Cookies

Ενα cookie χρησιμοποιείται για να αναγνωρισθεί ένας χρήστης.

Παραδείγματα

Cookie Καλωσορίσματος (Welcome Cookie)

Πώς να δημιουργήσουμε ένα cookie καλωσορίσματος.

<%

response.cookies("NumVisits").Expires = date + 365

num = request.cookies("NumVisits")

If num = "" Then

response.cookies("NumVisits") = 1

Else

response.cookies("NumVisits") = num + 1

End If

%>

<html>

<body>

<%

if num="" then

%>

Καλωσήρθατε! Είναι η πρώτη φορά που επισκέπτεστε

αυτή την ιστοσελίδα.

<%

else

%>

Έχετε επισκεφθεί αυτή την ιστοσελίδα

<%response.write(num)%> φορές μέχρι τώρα.

<%

end if

%>

</body>

</html>

Το cookie είναι ένα μικρό αρχείο που εμπεδώνει ο server στον φυλλομετρητή ενός χρήστη. Το cookie χρησιμοποιείται για να αναγνωρισθεί ο χρήστης. Κάθε φορά που ο ίδιος φυλλομετρητής ζητάει μια σελίδα, στέλνει και το cookie. Τα ASP scripts μπορούν να διαβάσουν αλλά και να ορίσουν τις τιμές των cookies.

Για να δώσουμε τιμή σ’ ένα cookie, χρησιμοποιούμε την εντολή Response.Cookies. Αν το cookie δεν υπάρχει, θα δημιουργηθεί και θα αποκτήσει την καθορισμένη τιμή.

Στο επόμενο παράδειγμα, στέλνουμε ένα cookie με όνομα userid με τιμή 25 στον φυλλομετρητή. Αυτό το cookie ισχύει μόνο κατά την τρέχουσα σύνοδο χρήστη. Αυτή η εντολή πρέπει να τοποθετηθεί πριν από το <html> tag :

<%

Response.Cookies("userid") = 25

%>

Αν θέλουμε να αναγνωρίσουμε έναν χρήστη αφού αυτός έχει σταματήσει και επανεκκινήσει τον φυλλομετρητή, πρέπει να χρησιμοποιήσουμε το χαρακτηριστικό (attribute) Expires για την Response.Cookies και να ορίσουμε μια μελλοντική ημερομηνία :

<%

Response.Cookies("userid") = 25

Response.Cookies("userid").Expires = "May 10, 2002"

%>

Για να διαβάσουμε την τιμή ενός cookie, χρησιμοποιούμε την εντολή Request.Cookies. Στο επόμενο παράδειγμα, θέλουμε να ανακτήσουμε την τιμή του cookie userid, που είναι 25.

<%

Response.Write(Request.Cookies("userid"))

%>

Το κάθε cookie που αποθηκεύεται στον φυλλομετρητή περιέχει πληροφορίες διαδρομής (path information). Όταν ο φυλλομετρητής ζητάει ένα αρχείο που είναι αποθηκευμένο στην ίδια θέση με την διαδρομή που είναι καθορισμένη στο cookie, ο φυλλομετρητής στέλνει το cookie στον server.

Εξ ορισμού η διαδρομή του cookie ορίζεται ίση με το όνομα της εφαρμογής που περιέχει το αρχείο που δημιούργησε το cookie. Αν ένα αρχείο, σε μια εφαρμογή με όνομα userapp, δημιουργεί ένα cookie, τότε κάθε φορά που ο φυλλομετρητής ενός χρήστη λαμβάνει ένα αρχείο σ’ αυτή την εφαρμογή, ο φυλλομετρητής θα στείλει το cookie.

Για να καθορίσουμε μια διαδρομή για ένα cookie, μπορούμε να χρησιμοποιήσουμε το χαρακτηριστικό (attribute) Path για την Response.Cookies.

Το επόμενο παράδειγμα εκχωρεί τη διαδρομή Sales/Customer/Profiles/ σ’ ένα cookie με όνομα Zip :

<%

Response.Cookies("Zip") = "12"

Response.Cookies("Zip").Expires = "January 1, 2001"

Response.Cookies("Zip").Path = "/Sales/Customer/Profiles/"

%>

Το επόμενο παράδειγμα ορίζει τη διαδρομή του cookie (cookie path) έτσι ώστε ο φυλλομετρητής του χρήστη θα στείλει ένα cookie κάθε φορά που ο φυλλομετρητής ζητάει ένα αρχείο από τον server, ανεξάρτητα από την εφαρμογή ή τη διαδρομή :

<%

Response.Cookies("Zip").Path = "/"

%>

 

Χωρίς Υποστήριξη Cookies

Δεν υποστηρίζουν όλοι οι φυλλομετρητές τα cookies. Αν η εφαρμογή μας βρίσκεται σε επαφή με φυλλομετρητές που δεν υποστηρίζουν cookies, δεν μπορούμε να χρησιμοποιήσουμε cookies. Θα πρέπει τότε να χρησιμοποιήσουμε άλλες μεθόδους για να περάσουμε πληροφορίες από σελίδα σε σελίδα στην εφαρμογή μας.

Υπάρχουν δύο τρόποι για να το κάνουμε αυτό :

http://www.w3schools.com/asp/greeting.asp?userid=Hege

 

Προσθήση Κρυμμένων Controls σε Φόρμα

Το επόμενο παράδειγμα περιέχει ένα κρυμμένο (hidden) control. Η φόρμα περνάει την τιμή του user id μαζί με τις άλλες πληροφορίες :

<form method="post" action="greeting.asp">

First Name : <input type="text" name="fname" value="">

Last Name : <input type="text" name="lname" value="">

<input type="hidden" name="userid" value="Hege">

<input type="submit" value="Send">

</form>

 

Το ASP Session Object

Το αντικείμενο Session χρησιμοποιείται για να αποθηκεύσει πληροφορίες ή να αλλάξει τις ρυθμίσεις (settings) για μια σύνοδο χρήστη (user session). Οι μεταβλητές που αποθηκεύονται στο Session object περιέχουν πληροφορίες για έναν μόνο χρήστη και είναι διαθέσιμες σ’ όλες τις σελίδες μιας εφαρμογής.

Οταν εργαζόμαστε με μια εφαρμογή, την ανοίγουμε, κάνουμε μερικές αλλαγές και μετά την κλείνουμε. Αυτό μοιάζει πολύ μ’ ένα Session. Ο υπολογιστής γνωρίζει ποιοι είμαστε. Γνωρίζει πότε ξεκινάμε την εφαρμογή και πότε την τελειώνουμε.

Αλλά στο Internet υπάρχει ένα πρόβλημα : ο web server δεν γνωρίζει ποιοι είμαστε και τι κάνουμε επειδή η διεύθυνση HTTP αλλάζει συνέχεια.

Η ASP λύνει αυτό το πρόβλημα δημιουργώντας ένα μοναδικό cookie για τον κάθε χρήστη. Το cookie στέλνεται στον πελάτη (client) και περιέχει πληροφορίες που αναγνωρίζουν τον χρήστη. Αυτό το interface αποκαλείται Session object.

Οι κοινές πληροφορίες που αποθηκεύονται στις μεταβλητές session είναι οι εξής : όνομα (name), id και προτιμήσεις (preferences). Ο server δημιουργεί ένα νέο αντικείμενο Session για τον κάθε καινούργιο χρήστη και καταστρέφει το αντικείμενο Session όταν τελειώσει η σύνοδος (session).

Ενα session μπορεί να ξεκινήσει όταν :

Ενα session τελειώνει αν ο χρήστης δεν έχει ζητήσει ή ανανεώσει μια σελίδα στην εφαρμογή ASP για μια καθορισμένη χρονική περίοδο. Αυτή η τιμή είναι ίση με 20 λεπτά εξ ορισμού.

Αν θέλουμε να ορίσουμε μια διαφορετική τιμή, μπορούμε να αλλάξουμε την ιδιότητα Timeout. Το επόμενο παράδειγμα ορίζει μια χρονική περίοδο 5 λεπτών :

<%

Session.Timeout = 5

%>

Για να τελειώσει ένα session μπορούμε να χρησιμοποιήσουμε και τη μέθοδο Abandon :

<%

Session.Abandon

%>

Το βασικό πρόβλημα με τα sessions είναι όταν πρέπει να τελειώσουν. Δεν γνωρίζουμε αν η τελευταία αίτηση του χρήστη ήταν και η τελική ή όχι. Έτσι δεν γνωρίζουμε για πόσο καιρό ακόμα να κρατήσουμε ζωντανά τα sessions. Αν περιμένουμε πάρα πολύ θα σπαταληθούν πηγές (resources) στον server.

Αλλά αν το session διαγραφεί πολύ γρήγορα διακινδυνεύουμε το ότι ο χρήστης μπορεί να επανέλθει και ο server να έχει διαγράψει όλες τις πληροφορίες, έτσι ο χρήστης θα πρέπει να ξεκινήσει πάλι από την αρχή. Το να βρούμε το σωστό χρονικό διάστημα (timeout interval) ίσως αποδειχθεί δύσκολο.

 

Αποθήκευση και Ανάκτηση Τιμών Μεταβλητών

Το πιο σημαντικό πράγμα για το αντικείμενο Session είναι ότι μπορούμε να αποθηκεύσουμε μεταβλητές σ’ αυτό, ως εξής :

<%

Session("username") = "Hege"

Session("age") = 24

%>

Το παραπάνω παράδειγμα ορίζει τη μεταβλητή Session username ίση με Hege και τη μεταβλητή Session age ίση με 24.

Οταν μια τιμή είναι αποθηκευμένη σε μια μεταβλητή session μπορούμε να την προσπελάσουμε από μια σελίδα της εφαρμογής ASP χρησιμοποιώντας το Session("username"), ως εξής :

Welcome <%Response.Write(Session("username"))%>

Η παραπάνω γραμμή επιστρέφει το μήνυμα : "Welcome Hege".

Μπορούμε επίσης να αποθηκεύσουμε τα user preferences στο Session object και μετά να έχουμε πρόσβαση σ’ αυτά για να επιλέξουμε ποια σελίδα θα επιστρέψουμε στον χρήστη.

Το παρακάτω παράδειγμα καθορίζει μια παραλλαγή μόνο κειμένου (text-only version) της σελίδας αν ο χρήστης έχει χαμηλή ανάλυση οθόνης :

<%If Session("screenres") = "low" Then%>

Αυτή είναι η παραλλαγή κειμένου της σελίδας

<%Else%>

Αυτή είναι η παραλλαγή πολυμέσων της σελίδας

<%End If%>

 

Αφαίρεση Τιμών Μεταβλητών

Η συλλογή Contents περιέχει όλες τις μεταβλητές που έχουν δημιουργηθεί και αποθηκευθεί σ’ ένα session. Με τη μέθοδο Remove μπορούμε να αφαιρέσουμε μια μεταβλητή από ένα session.

Το επόμενο παράδειγμα αφαιρεί ένα στοιχείο, σ’ αυτή την περίπτωση πρόκειται για μια μεταβλητή session με όνομα sale :

<%

If Session.Contents("age") <= 18 then

Session.Contents.Remove("sale")

End If

%>

Μπορούμε επίσης να χρησιμοποιήσουμε τη μέθοδο RemoveAll για να αφαιρέσουμε όλες τις μεταβλητές σ’ ένα session :

<%

Session.Contents.RemoveAll()

%>

 

Βρόχος στη Συλλογή Contents

Μπορούμε να κάνουμε βρόχο (loop) μέσα στη συλλογή Contents για να δούμε τι είναι αποθηκευμένο μέσα της :

<%

dim i

For Each i in Session.Contents

Response.Write(Session.Contents(i) & "<br>")

Next

%>

Αποτέλεσμα :

Hege

24

Αν δεν γνωρίζουμε τον αριθμό των στοιχείων που βρίσκονται στη συλλογή Contents, μπορούμε να χρησιμοποιήσουμε την ιδιότητα Count :

<%

dim i

dim j

j = Session.Contents.Count

Response.Write("Session variables : " & j)

For i=1 to j

Response.Write(Session.Contents(i) & "<br>")

Next

%>

Αποτέλεσμα :

Session variables : 2

Hege

24

 

Βρόχος στα Αντικείμενα

Μπορούμε να κάνουμε βρόχο (loop) μέσα στη συλλογή StaticObjects για να δούμε τις τιμές όλων των αντικειμένων που είναι αποθηκευμένα στο αντικείμενο Session :

<%

dim i

For Each i in Session.StaticObjects

Response.Write(Session.StaticObjects(i) & "<br>")

Next

%>

 

Το ASP Application Object

Μια ομάδα αρχείων ASP που εργάζονται μαζί για να εκτελέσουν κάποιον σκοπό αποκαλείται εφαρμογή (application). Το αντικείμενο Application χρησιμοποιείται στην ASP για να ενώσει αυτά τα αρχεία μαζί.

Το αντικείμενο Application χρησιμοποιείται για να αποθηκεύσει μεταβλητές και να έχει πρόσβαση σε μεταβλητές από οποιαδήποτε σελίδα, όπως ακριβώς το αντικείμενο Session. Η διαφορά είναι ότι όλοι οι χρήστες μοιράζονται ΕΝΑ αντικείμενο Application, ενώ με τα Sessions υπάρχει ένα αντικείμενο Session για τον κάθε χρήστη.

Το αντικείμενο Application πρέπει να περιέχει πληροφορίες που θα χρησιμοποιηθούν από πολλές σελίδες στην εφαρμογή, όπως είναι οι πληροφορίες για τη σύνδεση βάσης δεδομένων. Αυτό σημαίνει ότι μπορούμε να προσπελάσουμε τις πληροφορίες αυτές από οποιαδήποτε σελίδα. Σημαίνει ακόμη ότι μπορούμε να αλλάξουμε τις πληροφορίες σ’ ένα σημείο και οι νέες πληροφορίες θα φαίνονται αυτόματα σ’ όλες τις σελίδες.

 

Αποθήκευση και Ανάκτηση Τιμών Μεταβλητών

Οι μεταβλητές Application πρέπει να δημιουργηθούν στο αρχείο Global.asa, αλλά μπορούν να προσπελαστούν και να τροποποιηθούν από οποιαδήποτε σελίδα της εφαρμογής.

Μπορούμε να δημιουργήσουμε μεταβλητές Application στο αρχείο Global.asa με τον εξής τρόπο :

<script language="vbscript" runat="server">

Sub Application_OnStart

application("vartime") = ""

application("whoon") = 1

End Sub

</script>

Στο παραπάνω παράδειγμα δημιουργήσαμε δύο μεταβλητές Application : η πρώτη ονομάζεται vartime και η δεύτερη ονομάζεται whoon.

Μπορούμε να έχουμε πρόσβαση στην τιμή μιας μεταβλητής Application ως εξής :

Υπάρχουν

<%

Response.Write(Application("whoon"))

%>

ενεργές συνδέσεις

 

Βρόχος στη Συλλογή Contents

Μπορούμε να κάνουμε βρόχο (loop) μέσα στη συλλογή Contents για να δούμε τις τιμές όλων των μεταβλητών Application :

<%

dim i

For Each i in Application.Contents

Response.Write(Application.Contents(i) & "<br>")

Next

%>

Αν δεν γνωρίζουμε τον αριθμό των στοιχείων που βρίσκονται στη συλλογή Contents, μπορούμε να χρησιμοποιήσουμε την ιδιότητα Count :

<%

dim i

dim j

j = Application.Contents.Count

For i=1 to j

Response.Write(Application.Contents(i) & "<br>")

Next

%>

 

Βρόχος στα Αντικείμενα

Μπορούμε να κάνουμε βρόχο (loop) μέσα στη συλλογή StaticObjects για να δούμε τις τιμές όλων των αντικειμένων που είναι αποθηκευμένα στο αντικείμενο Application :

<%

dim i

For Each i in Application.StaticObjects

Response.Write(Application.StaticObjects(i) & "<br>")

Next

%>

 

Κλείδωμα και Ξεκλείδωμα

Μπορούμε να κλειδώσουμε μια εφαρμογή με τη μέθοδο Lock. Όταν μια εφαρμογή είναι κλειδωμένη, οι χρήστες δεν μπορούν να αλλάξουν τις μεταβλητές Application. Μπορούμε να ξεκλειδώσουμε μια εφαρμογή με τη μέθοδο Unlock, η οποία αφαιρεί το κλείδωμα από τη μεταβλητή Application :

<%

Application.Lock

Application.Unlock

%>

 

Η Ψευδοεντολή #include

Η ψευδοεντολή (directive) #include χρησιμοποιείται για να δημιουργήσουμε συναρτήσεις (functions), επικεφαλίδες (headers), υποσέλιδα (footers) ή στοιχεία (elements) που θα μπορούν να ξαναχρησιμοποιηθούν σε πολλές σελίδες.

Μπορούμε να εισάγουμε το περιεχόμενο ενός άλλου αρχείου σ’ ένα αρχείο ASP πριν το εκτελέσει ο server, με την ψευδοεντολή #include.

Ακολουθεί ένα αρχείο με όνομα mypage.asp :

<html>

<body>

<h3> Λέξεις Σοφίας : </h3>

<p><!--#include file="wisdom.inc"--></p>

<h3> Η ώρα είναι : </h3>

<p><!--#include file="time.inc"--></p>

</body>

</html>

Το αρχείο wisdom.inc είναι το εξής :

"One should never increase, beyond what is necessary, the number of entities required to explain anything".

Και το αρχείο time.inc :

<%

Response.Write(Time)

%>

Αν δούμε τον πηγαίο κώδικα (source code) σ’ έναν φυλλομετρητή, θα είναι σαν τον εξής :

<html>

<body>

<h3> Λέξεις Σοφίας : </h3>

<p> "One should never increase, beyond what is necessary,

the number of entities required to explain

anything". </p>

<h3> Η ώρα είναι : </h3>

<p> 11:33:42 AM </p>

</body>

</html>

 

Η Σύνταξη των Συμπεριλαμβανόμενων Αρχείων

Για να συμπεριλάβουμε ένα αρχείο σε μια σελίδα ASP, τοποθετούμε την ψευδοεντολή #include και μια από τις λέξεις κλειδιά virtual ή file μέσα σε comment tags :

<!--#include virtual = "somefilename"-->

ή

<!--#include file = "somefilename"-->

Το Somefilename είναι το όνομα του αρχείου που θέλουμε να συμπεριλάβουμε (include).

 

Η Λέξη Κλειδί Virtual

Η λέξη κλειδί virtual μάς δίνει τη δυνατότητα να συμπεριλάβουμε αρχεία από έναν άλλον εικονικό (virtual) φάκελο (directory) κάτω από τον ίδιο web server.

Αν υπάρχει ένα αρχείο με όνομα header.inc στο root directory, η επόμενη γραμμή εισάγει τα περιεχόμενα του header.inc σ’ ένα ASP αρχείο :

<!--#include virtual ="/header.inc"-->

Η λέξη κλειδί virtual πρέπει να χρησιμοποιείται όταν θέλουμε να χρησιμοποιήσουμε τα εισαγόμενα αρχεία σε πολλές σελίδες σε διαφορετικά web sites κάτω από τον ίδιο web server.

 

Η Λέξη Κλειδί File

Η λέξη κλειδί file μάς δίνει τη δυνατότητα να συμπεριλάβουμε αρχεία από τον ίδιο φάκελο ή από υποφακέλους της εισαγόμενης σελίδας.

Αν υπάρχει ένα αρχείο με όνομα header.inc σ’ έναν φάκελο που ονομάζεται asp, ένα αρχείο ASP σ’ αυτόν τον φάκελο μπορεί να εισάγει τα περιεχόμενα του header.inc ως εξής :

<!--#include file ="header.inc"-->

Η λέξη κλειδί file πρέπει να χρησιμοποιείται όταν θέλουμε να χρησιμοποιήσουμε τα εισαγόμενα αρχεία σε πολλές σελίδες μέσα σ’ ένα μόνο web site.

 

Διαφορές Ανάμεσα στις Λέξεις Κλειδιά File και Virtual

<!--#include virtual="/asp/header.inc"-->

Η παραπάνω γραμμή εισάγει ένα αρχείο με όνομα header.inc από τον φάκελο asp, ακόμη κι αν το αρχείο μ’ αυτή την εντολή βρίσκεται στον φάκελο /ado/text.

<!--#include file="/asp/header.inc"-->

Η παραπάνω γραμμή θα αποτύχει από τον φάκελο ado.

<!--#include file="../asp/header.inc"-->

Η παραπάνω γραμμή θα πετύχει από τον φάκελο ado.

Το επόμενο script δεν θα δουλέψει γιατί η ASP εκτελεί την ψευδοεντολή #include πριν εκχωρήσει μια τιμή στη μεταβλητή :

<%

fname="header.inc"

%>

<!--#include file="<%=fname%>"-->

Δεν μπορούμε να ανοίξουμε ή να κλείσουμε έναν οριοθέτη script σ’ ένα αρχείο .inc. Αυτό το script δεν θα δουλέψει :

<%

For i = 1 To n

<!--#include file="count.inc"-->

Next

%>

Αλλά αυτό το script θα δουλέψει :

<%

For i = 1 to n

%>

<!--#include file="count.inc" -->

<% Next %>

 

Το Αρχείο Global.asa

Το αρχείο Global.asa είναι ένα προαιρετικό αρχείο όπου μπορούμε να καθορίσουμε scripts συμβάντων (event scripts) και να δηλώσουμε αντικείμενα session και application που μπορούν να προσπελαστούν από οποιαδήποτε σελίδα σε μια εφαρμογή ASP.

Το αρχείο Global.asa πρέπει να είναι αποθηκευμένο στο root directory της ASP εφαρμογής και η κάθε εφαρμογή μπορεί να έχει ένα μόνο αρχείο Global.asa.

 

Τα Συμβάντα στο Αρχείο Global.asa

Στο αρχείο Global.asa μπορούμε να πούμε στα αντικείμενα application και session τι να κάνουν όταν ξεκινάει το application/session και τι να κάνουν όταν τελειώνει το application/session. Ο κώδικας γι’ αυτή τη δουλειά τοποθετείται σε event handlers.

Το αρχείο Global.asa μπορεί να περιέχει τέσσερις τύπους συμβάντων (events) :

Μπορούμε να δημιουργήσουμε μια υπορουτίνα που να χειρίζεται το καθένα απ’ αυτά τα συμβάντα στο αρχείο Global.asa :

<script language="vbscript" runat="server">

sub Application_OnStart

... some vbscript code

end sub

sub Application_OnEnd

... some vbscript code

end sub

sub Session_OnStart

... some vbscript code

end sub

sub Session_OnEnd

... some vbscript code

end sub

</script>

Δεν χρησιμοποιούμε τους οριοθέτες script της ASP, <% και %>, για να εισάγουμε scripts στο αρχείο Global.asa, αλλά πρέπει να τοποθετήσουμε τις υπορουτίνες μέσα στο στοιχείο <script> της HTML.

 

Περιορισμοί στο Αρχείο Global.asa

Οι περιορισμοί στο τι μπορούμε να συμπεριλάβουμε στο αρχείο Global.asa είναι οι εξής :

 

Χρήση Υπορουτινών

Το αρχείο Global.asa χρησιμοποιείται συχνά για να αρχικοποιήσει (initialize) μεταβλητές.

Το παρακάτω παράδειγμα δείχνει πώς να εντοπίσουμε την ακριβή ώρα που φθάνει ένας επισκέπτης για πρώτη φορά στο δικό μας Web site. Η ώρα αποθηκεύεται σε μια μεταβλητή Session με όνομα started και η τιμή αυτής της μεταβλητής μπορεί να προσπελαστεί από μια οποιαδήποτε σελίδα ASP της εφαρμογής :

<script language="vbscript" runat="server">

sub Session_OnStart

Session("started") = now()

end sub

</script>

Το αρχείο Global.asa μπορεί επίσης να χρησιμοποιηθεί για να ελέγξει την πρόσβαση σε σελίδες (page access).

Το παρακάτω παράδειγμα δείχνει πώς να ανακατευθύνουμε κάθε καινούργιο επισκέπτη σε μια άλλη σελίδα, που σ’ αυτή την περίπτωση είναι μια σελίδα με όνομα newpage.asp :

<script language="vbscript" runat="server">

sub Session_OnStart

Response.Redirect("newpage.asp")

end sub

</script>

Μπορούμε να συμπεριλάβουμε και συναρτήσεις (functions) στο αρχείο Global.asa.

Στο παρακάτω παράδειγμα η υπορουτίνα Application_OnStart λαμβάνει χώρα όταν ξεκινάει ο Web server. Μετά η υπορουτίνα Application_OnStart καλεί μια άλλη υπορουτίνα με όνομα getcustomers.

Η υπορουτίνα getcustomers ανοίγει μια βάση δεδομένων και ανακτά ένα σύνολο εγγραφών από τον πίνακα customers. Το recordset εκχωρείται σ’ έναν πίνακα (array), όπου μπορεί να προσπελαστεί από μια οποιαδήποτε σελίδα ASP χωρίς να απασχολήσουμε τη βάση δεδομένων :

<script language="vbscript" runat="server">

sub Application_OnStart

getcustomers

end sub

sub getcustomers

set conn = Server.CreateObject("ADODB.Connection")

conn.Provider = "Microsoft.Jet.OLEDB.4.0"

conn.Open "c:/webdata/northwind.mdb"

set rs = conn.execute("select name from customers")

Application("customers") = rs.GetRows

rs.Close

conn.Close

end sub

</script>

 

Παράδειγμα Αρχείου Global.asa

Θα δημιουργήσουμε ένα αρχείο Global.asa που θα μετράει τον αριθμό των τρέχοντων επισκεπτών. Η υπορουτίνα Application_OnStart ορίζει τη μεταβλητή Application των επισκεπτών ίση με 0 όταν ξεκινάει ο server. Η υπορουτίνα Session_OnStart προσθέτει έναν στη μεταβλητή visitors κάθε φορά που φθάνει έναν νέος επισκέπτης. Η υπορουτίνα Session_OnEnd αφαιρεί έναν από τους επισκέπτες κάθε φορά που καλείται. Το αρχείο Global.asa :

<script language="vbscript" runat="server">

Sub Application_OnStart

Application("visitors") = 0

End Sub

Sub Session_OnStart

Application.Lock

Application("visitors") = Application("visitors") + 1

Application.UnLock

End Sub

Sub Session_OnEnd

Application.Lock

Application("visitors") = Application("visitors") - 1

Application.UnLock

End Sub

</script>

Για να εμφανίσουμε τον αριθμό των τρέχοντων επισκεπτών σ’ ένα αρχείο ASP :

<html>

<head>

</head>

<body>

<p>

Υπάρχουν <%=Application("visitors")%>

online τώρα!

</p>

</body>

</html>

 

Τα Αντικείμενα της ASP

Τα ASP Built-in Objects

Τα ASP Scripting Objects

 

back.gif (9867 bytes)

Επιστροφή