Kemarin saya telah berhasil menginstall PHP di Windows Vista saya
dengan fast cgi, tetapi sedang malas untuk membuat blog tentang
instalasi tersebut. Jika tertarik, baca how-to nya di sini
Sekarang
saya menjajal si php handler dengan membuat sebuah web tak berguna yang
terdiri dari halaman .php dan .aspx. Dari halaman php yang saya buat
akan memanggil fungsi Ajax yang ditangani oleh tetangganya aspx. Untuk
itu, saya akan membutuhkan Ajax.dll versi jaman dulu racikan Michael Schwarz yang penggunaannya bisa dilihat di sini.
Berikut ini saya tunjukkan lokasi websitenya kedua halaman tersebut.
Tidak lupa, menambahkan referensi Ajax.dll yang membantu saya ber-ajax ria.

Sekarang saya akan membuat sebuah fungsi sangat sederhana di Default.aspx.cs, yaitu mengambil waktu server

Register
Type For Ajax ini bermaksud untuk membangkitkan javascript yang
membungkus method di atas. Berarti sampai saat ini, kita telah membuat method
yang mengembalikan waktu di server dan telah membangkitkan javascript
yang mengenal fungsi _Default.AmbilWaktuServer() yang akan
mengembalikan waktu di server.
Rencananya, pada kedua halaman
yang akan saya buat, katakanlah Default.aspx dan test.php akan memiliki
body yang sama. Saya hanya membutuhkan sebuah elemen div untuk
menampilkan waktu di server. Saya buat sesederhana mungkin seperti ini
Sesuai pedoman penggunaan Ajax.dll dari Michael Schwarz, maka script pada halaman aspx akan menjadi seperti ini

Bagi yang tidak terbiasa dengan jquery, intinya web browser akan menjalankan 2 baris script pada saat halaman ini loaded:
- Memanggil fungsi Ajax AmbilWaktuServer untuk meminta data waktu dari server.
- menampilkan response dari server ke dalam elemen div dengan id="timelabel".
Tembak layar hasilnya adalah seperti ini

hasilnya adalah 10/05/2008 18:04:50. Ini adalah waktu server yang didapatkan dengan memanggil fungsi Ajax pada saat loaded.
Dengan memanfaatkan addons di suatu browser, saya dapat mengetahui url
yang dipanggil dengan _Default.AmbilWaktuServer untuk meminta data
waktu di server. Untuk kepentingan halaman tetangganya, php, saya copy
url tersebut beserta query stringnya sehingga saya dapat memanggilnya
pula. Ini adalah tembak layar dari kodingan php tersebut

Sekali lagi saya dibantu oleh jquery untuk memanggil url yang barusan. Dan hasilnya pun keluar

Wah ketahuan deh selang waktunya 7 menit kurang 7 detik.
Bagaimana jika mengujinya dengan session?
Satu
hal yang membuat saya penasaran adalah bagaimana kedua halaman ini
(aspx dan php) menangani session. Sehingga, di atas elemen div
"timelabel" tersebut, saya akan menampilkan session["views"]. Kedua
halaman ini akan membuat dan menampilkan informasi views di session ( session["views"] ) yang diincrement setiap halaman tersebut dipanggil.
(upload gambar kelamaan ah)
test.php:
<body>
<form id="form1" runat="server">
<div>
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views'] = $_SESSION['views']+ 1;
else
$_SESSION['views'] = 1;
echo "views = ". $_SESSION['views'];
echo '<div id="timelabel"></div>';
?>
</div>
</form>
</body>
</html>
body @ Default.aspx:
<body>
<form id="form1" runat="server">
<div>
views = <asp:Label ID="Views" runat="server" ></asp:Label>
<div id="timelabel"></div>
</div>
</form>
</body>
Default.aspx.cs
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(_Default));
if (Session["views"] == null)
{
Session["views"] = 1;
}
else
{
Session["views"] = 1 + Convert.ToInt32(Session["views"].ToString());
}
Views.Text = Session["views"].ToString();
}
[Ajax.AjaxMethod()]
public static string AmbilWaktuServer()
{
return DateTime.Now.ToString();
}
}
Dan ternyata informasi
Views
session yang tersimpan di session pada kedua halaman berbeda. Apakah
karena proses yang menghandle masing-masing halaman berbeda sehingga
httpcontext yang disimpan juga berbeda?