📰 WHAT'S NEW?

[12] Session

Pengenalan Session

Dalam sebuah aplikasi web, pengunjung berpindah dari satu halaman ke halaman yang lain, sehingga penting untuk bisa tetap mengenali data pengunjung.JSP menyediakan objek session yang dapat menyimpan data khusus dari pengunjung.

Fungsi Session

Fasilitas session merupakan fasilitas yang penting dalam pembuatan aplikasi web, dimana pengunaan session yang umum adalah untuk menangani autentikasi atau sistem login. Pengunjung yang telah login akan memiliki variabel yang tersimpan dalam session yang dapat dikenali oleh program sehingga dapat mendeteksi apakah pengunjung telah login.

Pengunaan Session

Penggunaan session dapat kita lihat pada :
Shopping cart, dimana pengunjung yang ingin membel dapat menyimpan informasi barang belanjaan yang akan di beli pada shopping cart elektronik yang menggunakan fasilitas session. Semua barang belanjaan disimpan dengan fasilitas session sehingga user dapat melihat sewaktu-waktu barang apa saja yang telah dibeli setelah melihat katalog elektronik.

Metode Utama session

Terdapat 3 metode utama yang dimiliki oleh objek session yaitu:
public void setAttribute (String nama, Object value)
Throws IllegalStateException

public void getAttribute (String nama)
Throws IllegalStateException

public void removeAttribute (String nama, Object value)
Throws IllegalStateException

Sebagai contoh apabila kita ingin menyimpan data dalam session dapat dilakukan dengan kode:
session.setAttribute(”namaku”,”Isak”);
Dan untuk mendapatkan data tersebut kembali dapat dilakukan dengan kode seperti berikut :
String nm = (String) session.getAttribute(”namaku”);
Lalu apabila kita ingin menghapus data tersebut dapat dilakukan dengan kode berikut.
session.removeAttribute(”namaku”);

Membuat Session
Kode : savenameform.jsp
<%@ page language="java" %>
<html>
<head>
<title>Name Input Form</title>
</head>
<body>
<form method="post" action="savenametosession.jsp">
<p><b>Enter Your Name: </b><input type="text" name="username"><br>
<input type="submit" value="Submit">
</form>
</body>
</html>

Ketika tombol submit diklik, file savenametosession,jsp dipanggil. Savenametosession.jsp mengambil nilai nama user dan menyimpannya sebagai user session dengan fungsi session.attribute(“username”,”username”);.

Kode : savenametosession.jsp
<%@ page language="java" %>
<%  
String username=request.getParameter("username");
if(username==null) username="";
session.setAttribute("username",username);
%>
<html>
<head>
<title>Name Saved</title>
</head>
<body>
<p><a href="showsessionvalue.jsp">Next Page to view the session value</a><p>
</body>
</html>

Kode : showsessionvalue.jsp

<%@ page language="java" %>
<%
String username=(String) session.getAttribute("username");
if(username==null) username="";
%>
<html>
<head>
<title>Show Saved Name</title>
</head>
<body>
<p>Welcome: <%=username%><p>
</body>
</html>

Beda cookies dengan session

Cookies
Cookies biasa nya untuk login
Cookies merupakan mekanisme penyisipan sebuah variabel data dengan waktu tertentu pada sisi client (browser). Data pada cookies itulah yang pertama kali akan dikirimkan ke server, yang kemudian disimpan dalam browser web. Cookies memiliki kemampuan untuk menyimpan serta memanggil kembali data yang ada di hardisk client.
Cara penulisan yang lengkap :
SetCookie (string name, string value, int expire, string path, string domain, int secure )
Session 
Session biasanya untuk hak akses pengaturan menu.
Session digunakan untuk memberi hak akses kepada tiap-tiap halaman web akan memiliki perbedaan akses walaupun banyak sekali user yang login dalam kurun waktu lama.
Fungsi session dari PHP yang digunakan ialah :
Session_Start : Untuk mengawali session, fungsi ini harus ditaruh di baris paling atas setelah tanda Untuk meregister variabel
Session_is_register ==> Mengembalikan nili true atau false terhadap sebuah variabel apakah masih di register
oleh session
Session_Unregister() ==> Untuk me-unregister session
Session_destroy ==> Unregister seluruh session yang telah diregister dalam fungsi session_register

[11] Cookie

Apa itu Cookie ?
Cookies merupakan data file yang ditulis ke dalam hard disk komputer oleh web server yang digunakan untuk mengidentifikasikan diri user pada situs tersebut sehingga sewaktu user kembali mengunjugi situs tersebut, situs itu akan dapat mengenalinya. Jadi dapat dikatakan bahwa cookies merupakan semacam ID card user saat koneksi pada situs. Tiap-tiap website pada umumnya mengeluarkan / membuat cookies sesuai karakterikstiknya. Ada web yang dapat menyapa user tiap kali mengunjungi situs tersebut selayaknya teman lama karena menggunakan cookies.

Kenapa Cookie dibuat ?
Mungkin kamu bertanya-tanya kenapa juga cookie dibuat? Alasannya karena cookie nyaman dan efektif saat digunakan. Jika website dengan pengunjung ribuan atau jutaan tidak menggunakan cookie, mereka akan menyimpan data interaksi yang dilakukan pengunjung ke server dan akan di proses disana. Tentu ini akan memakan waktu yang lama, sedangkan jika menggunakan cookie maka akan lebih cepat.

Apa kegunaan cookie ?
1. Membantu web site untuk “mengingat” siapa kita dan mengatur preferences yang sesuai sehingga apabila user kembali mengunjungi web site tersebut akan langsung dikenali.
2. Menghilangkan kebutuhan untuk me-register ulang di web site tersebut saat mengakses lagi tersebut (site tertentu saja), cookies membantu proses login user ke dalam web server tersebut.
3. Memungkinkan web site untuk menelusuri pola web surfing user dan mengetahui situs favorit yang sering dikunjunginya.

Berbahayakan cookie ?
Cookie tidaklah berbahaya, cookie hanyalah metode yang digunakan untuk mempermudah seorang pengguna internet. Selain itu cookie juga tidak dapat terinfeksi oleh malware atau virus. Lalu apa yang perlu kamu takutkan pada cookie? Cerita terburuk untuk ini adalah ketika seseorang mencuri cookie kamu untuk membuat data palsu atau mendapatkan email dan password. Namun kamu jangan terlalu kawathir karena keamaan cookie tergantung dari website yang kamu kunjungi dan browser yang kamu gunakan. Karena biasanya cookie telah dienkripsi agar terlindungi dari serangan hacker.

Bagaimana menghapus cookie ?
Ini tidaklah masalah, menghapus cookie adalah salah satu hal terbaik untuk melindungi privasi kamu dari serangan hacker. Kalaupun kamu menghapus cookie, kamu hanya perlu login lagi ke akun Facebook yang biasanya sudah terbuka situs-situs lain yang biasanya langsung masuk ke akun kamu. Pada setiap browser cookie bisa dihapus dan letaknya berbeda-beda tergantung browser yang kamu gunakan. Berikut caranya:
·       Internet Explorer: Setting>Safety>Delete Browsing History
·       Firefox: Tools>Clear Recent History
·       Chrome: Setting>Tools>Clear browsing data
·       Opera: Opera>Setting>Delete Private Data
Kamu juga bisa menggunakan software seperti CCleanerBleachBitEraser atau Privacy Agent.

Batasan-batasan cookies
  • Suatu client hanya dapat menampung 300 cookie.
  • Suatu server hanya bisa mengirim 20 cookie ke suatu client.
  • Sebuah cookie memiliki ukuran maksimal 4 Kb, sehingga total space hard disk yang digunakan cookie hanya mencapai 1,2 Mb.
  • Sebuah cookie hanya dapat dibaca dan diubah oleh server dari domain dimana cookie tersebut berasal.
  • Sebuah cookie hanya dapat berisi data berupa teks dan tidak bisa berupa data biner.
Sekarang langsung saja kita buat codingnya. Seperti biasa buat sebuah new Java Web project dengan menggunakan netbeans kalian. Lalu ubah file index.jsp menjadi seperti ini :

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <a href="doCheckCookie.do">Cek browser apakah mendukung cookie atau tidak</a> <br>
        <a href="doCreateCookie.do">Buat cookie</a> <br>
        <a href="doSeeCookie.do">Lihat cookie</a> <br>
    </body>
    <%
        String cek = (String) request.getAttribute("cek");
        String hsl = "Browser ini tidak mendukung cookie";
        if(cek!=null)
        {
            Cookie[] cekCookie = request.getCookies();
            if(cekCookie!=null)
            {
                Cookie c1;
                for(int i=0; i< cekCookie.length; i++)
                {
                    c1 = cekCookie[i];
                    if(c1.getName().equals("test") && c1.getValue().equals("testing cookie"))
                    {
                        hsl="Browser ini mendukung cookie";
                        break;
                    }
                }
            }
    %>
        <script type="text/javascript">
            alert('<%=hsl%>');
        </script>
    <%
        }
    %>

    <%
        String msg = (String) request.getAttribute("msg");
        if(msg!=null)
        {
    %>
    <script type="text/javascript">
        alert('<%=msg%>');
    </script>
    <%
        }
    %>

</html>

Pada halaman index.jsp terdiri dari 3 menu, menu pertama yaitu Cek browser apakah mendukung cookie atau tidak berfungsi untuk mengecek apakah browser yang digunakan mendukung cookies atau tidak. Cara mengeceknya sebenarnya sederhana, saat user mengklik menu tersebut maka di servlet yang dituju akan membuat sebuah cookie. Lalu saat di-redirect ke halaman index.jsp, disini dilakukan pengambilan cookie. Jika tidak ada cookie yang dibuat di servlet tersebut maka sudah dipastikan browser tidak mendukung cookie. Tampilannya jika menu pertama diklik adalah seperti ini Sekarang buatlah sebuah class CheckCookie tersebut

package com.maniakjava.action;
 
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class CheckCookie extends HttpServlet
{
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws IOException, ServletException
     {
        Cookie cookie = new Cookie("test","testing cookie");
        response.addCookie(cookie);
        request.setAttribute("cek", "cek");
        RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
        rd.forward(request, response);
     }
}

Sekarang coba jalankan menu ketiga terlebih dahulu,
Cookie test adalah cookie yang sudah kita buat di menu pertama, sedangkan cookie kedua dan ketiga merupakan cookie yang dibuat secara otomatis oleh server. Code untuk class menu ketiga adalah seperti ini

package com.maniakjava.action;
 
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class SeeCookie extends HttpServlet
{
 
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws IOException, ServletException
 
     {         
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        Cookie[] allCookie = request.getCookies();
        Cookie[] cookie = new Cookie[allCookie.length];
        
        if(allCookie==null)
        {
            request.setAttribute("msg", "Tidak ada cookie yang tercipta");
            RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
            rd.forward(request, response);
        }
        else
        {
           for(int i=0; i<allCookie.length; i++)
            {
                cookie[i]= allCookie[i];
                out.print("Nama Cookie : " + cookie[i].getName());
                out.print("<br>Nilai Cookie : " + cookie[i].getValue());
                out.println("<br><br>");
            }
        }
 
     }
}

Berikutnya code class untuk menu nomor 2, yaitu buat cookie adalah seperti ini

package com.maniakjava.action;
 
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class CreateCookie extends HttpServlet
{
 
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws IOException, ServletException
 
     {
        Cookie cookie1 = new Cookie("site","maniakjava");
        Cookie cookie2 = new Cookie("name","secret");
        cookie1.setMaxAge(60*60); //valid selama 1 jam
        cookie2.setMaxAge(60*60); //valid selama 1 jam
        response.addCookie(cookie1);
        response.addCookie(cookie2);
        request.setAttribute("msg", "Cookie sudah dibuat");
        RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
        rd.forward(request, response);
     }
}

Sekarang coba jalankan menu kedua, lalu jalankan kembali menu ketiga. Maka 2 cookie dengan nama site dan name akan muncul. Lalu untuk cookie site dan name, saya set masa berlakunya hanya selama 1 jam. Jadi coba saja 1 jam kemudian kalian langsung jalankan menu ketiga, maka cookie site dan name tidak akan muncul lagi.
Secara default, suatu cookie hanya berlaku selama browser belum ditutup. Artinya, ketika browser ditutup maka cookie yang tidak diset MaxAgenya akan dihapus. Nah supaya cookie tetap terdaftar di suatu client meskipun browser sudah ditutup adalah dengan menggunakan method setMaxAge, seperti contoh di atas.