
Hi,
In this short blog post, you can find sample code on how to read/save cookies in portal component java code or using javascript.
First we build a portal component that demonstrates both.
The main doContent method, calling both techniques:
package com.sap.portal.examples;
import javax.servlet.http.Cookie;
import com.sapportals.portal.prt.component.*;
import com.sapportals.portal.prt.resource.IResource;
public class WebCookie extends AbstractPortalComponent
{
public void doContent(IPortalComponentRequest request, IPortalComponentResponse response)
{
handleCookiesByJS(request,response);
handleCookiesInJava(request,response);
}
....
1. First method, writing cookies in Javascript and then reading them:
private void handleCookiesByJS(IPortalComponentRequest request, IPortalComponentResponse response)
{
//include the javascript source that holds the js method to store/read cookie
IResource resource = request.getResource(IResource.SCRIPT,"scripts/cookiescript.js");
response.include(request, resource);
//launch a js method to write cookie
response.write("<script>write_cookie();</script>");
//launch a js method to read cookie and print on screen
response.write("Cookie reads = " + "<script>document.write(gettimes());</script>");
}
Above you can see javascript "cookiescript.js" is included in the response of the portal component. This js contains two methods write_cookie() and gettimes()
After which write_cookie() is called and eventually gettimes() is called.
javascript code cookiescript.js:
The write_cookie() method searches for a cookie named "Basic_Cookie" and adds 1 to the value of the cookie
Eventually the cookie actually stores the number of times this method was called:
var cookie_name = "Basic_Cookie"
function write_cookie() {
var index =document.cookie? document.cookie.indexOf(cookie_name) : -1;
if (index == -1){
//creating new cookie which will expire in 2040
document.cookie=cookie_name+"=1; expires=Wednesday, 01-Aug-2040 08:00:00 GMT";
}
else{
//cookie exists, read its value
var countbegin = (document.cookie.indexOf("=", index) + 1);
var countend = document.cookie.indexOf(";", index);
if (countend == -1) {
countend = document.cookie.length;
}
var count = eval(document.cookie.substring(countbegin, countend)) + 1;
//update the cookie
document.cookie=cookie_name+"="+count+"; expires=Wednesday, 01-Aug-2040 08:00:00 GMT";
}
}
The gettimes() method read value of the "Basic_Cookie" and returns number stored in it:
//this method reads the value of the cookie and return number stored in it.
function gettimes() {
var count = 0;
if(document.cookie) {
var index = document.cookie.indexOf(cookie_name);
if (index != -1){
var countbegin = (document.cookie.indexOf("=", index) + 1);
var countend = document.cookie.indexOf(";", index);
if (countend == -1){
countend = document.cookie.length;
}
count = document.cookie.substring(countbegin, countend);
}
}
return (count + " times");
}
2. Second method, accessing cookie in portal component java code:
private void handleCookiesInJava(IPortalComponentRequest request, IPortalComponentResponse response)
{
response.write("<br>");
saveToCookie(request,response,"MyCookie","MyCookieValue");
String val = getCookieValue(request,"MyCookie");
response.write("Got cookie MyCookie with its value="+val); //first time it will be null, since the response is not written yet
}
Here the component calls a java method saveToCookie with key and value.
Then it reads the cookie value by calling getCookieValue method and prints it.
saveToCookie method:
private void saveToCookie(IPortalComponentRequest request , IPortalComponentResponse response , String cookieName, String cookieValue)
{
//getting all cookies from request
Cookie [] cookies = request.getServletRequest().getCookies();
if(cookies != null)
{
for(int i = 0 ; i < cookies.length ; i++)
{
Cookie cookie = cookies[i];
//find the specific cookie and deletes it
if(cookie != null && cookie.getName().equals(cookieName))
{
cookie.setMaxAge(0);
break;
}
}
}
//create a new cookie with new value and save it
Cookie cookie = new Cookie(cookieName , cookieValue);
cookie.setPath("/");
response.addCookie(cookie);
}
getCookieValue method:
private String getCookieValue(IPortalComponentRequest request, String cookieName)
{
//get all cookies from request
Cookie [] cookies = request.getServletRequest().getCookies();
if(cookies != null)
{
for(int i = 0 ; i < cookies.length ; i++)
{
Cookie cookie = cookies[i];
//search for the cookie and get its value
if(cookie != null && cookie.getName().equals(cookieName))
{
return cookie.getValue();
}
}
}
return null;
}
After deploying this portal component, If we execute it 3 times, we will get the following output , from both techniques:
Related Links:
Important - Security consideration using cookies
http://www.allaboutcookies.org/cookies/
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
17 | |
15 | |
13 | |
9 | |
9 | |
9 | |
8 | |
7 | |
7 | |
6 |