<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Kandar's Scratch</title>
	<atom:link href="http://www.kandar.info/index.php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.kandar.info</link>
	<description>Start learning to write my mind</description>
	<pubDate>Sun, 29 Nov 2009 03:06:53 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Configuring Nginx, MySQL and PHP  with FastCGI (spawn-fcgi) On Ubuntu 9.10</title>
		<link>http://www.kandar.info/index.php/linux/configuring-nginx-mysql-and-php-with-fastcgi-spawn-fcgi-on-ubuntu-910</link>
		<comments>http://www.kandar.info/index.php/linux/configuring-nginx-mysql-and-php-with-fastcgi-spawn-fcgi-on-ubuntu-910#comments</comments>
		<pubDate>Sun, 29 Nov 2009 03:01:30 +0000</pubDate>
		<dc:creator>kandar</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<category><![CDATA[fastcgi]]></category>

		<category><![CDATA[nginx]]></category>

		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.kandar.info/?p=97</guid>
		<description><![CDATA[As lots of blogs and tutorial wrote, Nginx (pronounced &#8220;engine x&#8221;) is a high-performance HTTP server. The most great and important feature from Nginx is low resource consumption. So that, you can allocated your RAM Memory to other process such as MySQL or Memcached.  This tutorial shows how you can install Nginx on an [...]]]></description>
			<content:encoded><![CDATA[<p>As lots of blogs and tutorial wrote, Nginx (pronounced &#8220;engine x&#8221;) is a high-performance HTTP server. The most great and important feature from Nginx is low resource consumption. So that, you can allocated your RAM Memory to other process such as MySQL or Memcached.  This tutorial shows how you can install Nginx on an Ubuntu 9.10 server with PHP5 support through FastCGI (spawn-fcgi).</p>
<p>Spawn FastCGI (spawn-fcgi) (http://redmine.lighttpd.net/projects/spawn-fcgi) is a project  originally to support Lihttpd. On lots of tutorial and how to, if we want to configuring Nginx and FastCGI, we have also install lighttpd to get  spawn-fcgi package. At that time there was still no standalone package for  spawn-fcgi. Fortunately since version 9.10 ( or 9.04) Ubuntu provide a standalone spawn-fcgi on  they&#8217;re repository. So that, you don&#8217;t have to install Lighttpd anymore. Lets start it!<span id="more-97"></span></p>
<p>Install package that we need for Nginx and PHP:</p>
<p>sudo apt-get install php5-cgi nginx spawn-fcgi</p>
<p>Start your Nginx server:</p>
<p>sudo service nginx start</p>
<p>Open your browser and point the adders to your IP or Hostname nginx server. If you see a page said &#8220;Welcome to nginx&#8221; it mean you are succeed installing nginx.</p>
<p>Now open nginx configuration file. Type:</p>
<p>vim /etc/nginx/sites-available/default</p>
<p>See part some things like this (on my ubuntu this is start on line 47):</p>
<p>#location ~ \.php$ {</p>
<p>#fastcgi_pass   127.0.0.1:9000;</p>
<p>#fastcgi_index  index.php;</p>
<p>#fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;</p>
<p>#includefastcgi_params;</p>
<p>#}<br />
Uncomment and edit it so its look like this:</p>
<p>location ~ \.php$ {<br />
fastcgi_pass   127.0.0.1:9000;<br />
fastcgi_index  index.php;<br />
fastcgi_param  SCRIPT_FILENAME  /var/www/nginx-default$fastcgi_script_name;<br />
include fastcgi_params;<br />
}</p>
<p>now save it.</p>
<p>Start your FastCGI. To start a PHP FastCGI daemon listening on port 9000 on localhost and running as the user and group www-data, we run the following command:</p>
<p>sudo spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid</p>
<p>Restart your nginx<br />
sudo service nginx restart</p>
<p>Now create phpinfo.php to test your server. Type:</p>
<p>vi /var/www/nginx-default/info.php</p>
<p>and fill this line:</p>
<p>&lt;?php<br />
phpinfo();<br />
?&gt;</p>
<p>Save it.</p>
<p>Now call that file in a browser (e.g. http://192.168.0.100/info.php).</p>
<p>As you see, PHP5 is working, and it&#8217;s working through FastCGI, as shown in the Server API line.</p>
<p>To make your nginx start every boot, type this:</p>
<p>sudo update-rc.d nginx defaults</p>
<p>To start FastCGI every boot, open rc.local file:</p>
<p>sudo vim /etc/rc.local</p>
<p>add this before exit line:</p>
<p>/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid</p>
<p>Its time to instal MySQL.</p>
<p>sudo apt-get install mysql-server mysql-client php5-mysql</p>
<p>You will be asked to provide a password for the MySQL root user</p>
<p>When its done, you have to restart nginx once again.</p>
<p>sudo service nginx restart</p>
<p>call info file in a browser again. If your see word mysql in page appeared it mean you have done your works!</p>
<p>You should check these cool tutorial:</p>
<p><a href="http://www.howtoforge.com/installing-nginx-with-php5-and-mysql-support-on-ubuntu-8.10" target="_blank">http://www.howtoforge.com/installing-nginx-with-php5-and-mysql-support-on-ubuntu-8.10</a></p>
<p><a href="http://chrisjohnston.org/2009/setting-up-a-lemp-stack-ubuntu-904" target="_blank">http://chrisjohnston.org/2009/setting-up-a-lemp-stack-ubuntu-904</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kandar.info/index.php/linux/configuring-nginx-mysql-and-php-with-fastcgi-spawn-fcgi-on-ubuntu-910/feed</wfw:commentRss>
		</item>
		<item>
		<title>Integrasikan Single Sign On (SSO) Facebook Connect dengan Website Berbasis PHP</title>
		<link>http://www.kandar.info/index.php/php/integrasikan-single-sign-on-sso-facebook-connect-dengan-website-berbasis-php</link>
		<comments>http://www.kandar.info/index.php/php/integrasikan-single-sign-on-sso-facebook-connect-dengan-website-berbasis-php#comments</comments>
		<pubDate>Sun, 15 Nov 2009 07:23:40 +0000</pubDate>
		<dc:creator>kandar</dc:creator>
		
		<category><![CDATA[php]]></category>

		<category><![CDATA[facebook]]></category>

		<category><![CDATA[single sign on]]></category>

		<category><![CDATA[sso]]></category>

		<guid isPermaLink="false">http://www.kandar.info/?p=74</guid>
		<description><![CDATA[Facebook merupakan website jejaring sosial terbesar saat ini. Berdasarakan data Alexa Facebook menempati peringkat ke dua terbesar di seluruh dunia setelah Google. Untuk di Indonesia sendiri Facebook menjadi website yang paling banyak dikunjungi.
Salah satu penyebab yang menjadikan Facebook begitu digemari oleh setiap orang adalah banyaknya applikasi yang bisa digunakan baik untuk kepentingan serius (seperti applikasi [...]]]></description>
			<content:encoded><![CDATA[<p>Facebook merupakan website jejaring sosial terbesar saat ini. Berdasarakan data Alexa Facebook menempati peringkat ke dua terbesar di seluruh dunia setelah Google. Untuk di Indonesia sendiri Facebook menjadi website yang paling banyak dikunjungi.</p>
<p>Salah satu penyebab yang menjadikan Facebook begitu digemari oleh setiap orang adalah banyaknya applikasi yang bisa digunakan baik untuk kepentingan serius (seperti applikasi survey atau group) maupun sekedar mencari hiburan dengan bermain game. Banyaknya applikasi ini dimungkinkan karena Facebook membuka platform applikasinya sehingga bisa dipelajari dan digunakan oleh setiap developer applikasi.</p>
<p><span id="more-74"></span>Facebook Connect merupakan salah satu bagian dari platform ini dimana developer bisa menggunakannya untuk mengintegrasikan proses login dan mendapatkan data user untuk dimanfaatkan pada website kita. Dengan Facebook Connect user hanya cukup login seperti biasa di halaman login Facebook dan selebihnya Facebook akan mengirimkan data-data apa saja yang diperlukan untuk website kita.</p>
<p>Bagai mana caranya menggunakan Facebook Connect ini? Berikut adalah panduannya.</p>
<p><a href="http://www.kandar.info/demo/facebook-connect/" target="_blank">DEMO<br />
</a> | <a href="http://www.mediafire.com/file/52tdguogd01/facebook-connect.tar.gz" target="_blank">DOWNLOAD SOURCECODE</a></p>
<p>Yang pertama kali perlu Anda lakukan adalah membuat applikasi di halaman ini <a href="http://developers.facebook.com/setup.php" target="_blank">http://developers.facebook.com/setup.php</a>. Anda bisa mengikuti wizard yang ada atau bisa juga membaca panduannya di sini <a href="http://developers.facebook.com/get_started.php" target="_blank">http://developers.facebook.com/get_started.php</a>. Setelah selesai Anda akan mendapatkan API Key dan Application Secret. Kemudian Anda juga mebutuhkan Facebook PHP Client Library yang bisa didownload di sini <a href="http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz" target="_blank">http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz</a>.</p>
<p>Catatan: penulis melakukan modifikasi pada Library ini yaitu pada file facebook.php baris 238. Hal ini untuk memperbaiki penghapusan cookie pada saat logut.</p>
<p>Gunakanlah API Key dan Application Secret untuk mengisi nilai pada variable $appapikey dan $appsecret pada file config.php. Anda juga harus mengisikan nilai url path pada varible $this_root berikut adalah contohnya:</p>
<p>Berikut ini adalah fungsi untuk melakukan inisialisasi class facebook:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> _fbc_make_client<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$appapikey</span><span style="color: #339933;">,</span> <span style="color: #000088;">$appsecret</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> Facebook<span style="color: #009900;">&#40;</span><span style="color: #000088;">$appapikey</span><span style="color: #339933;">,</span><span style="color: #000088;">$appsecret</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'connect.facebook.com'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Untuk memudahkan dalam mendapatkan object hasil dari class facebook, gunakan fungsi berikut ini:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> fbc_facebook_client<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  static <span style="color: #000088;">$facebook</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$facebook</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$facebook</span> <span style="color: #339933;">=</span> _fbc_make_client<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$facebook</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Untuk mendapatkan objek api client gunakan fungsi berikut:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> fbc_api_client<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">return</span> fbc_facebook_client<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">api_client</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Fungsi berikut ini digunakan untuk melakukan koneksi ke Facebook API tanpa haru menyertakan session user:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> fbc_anon_api_client<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$client</span> <span style="color: #339933;">=</span> _fbc_make_client<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$client</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">user</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$client</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">api_client</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">session_key</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$client</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">api_client</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Berikut ini fungsi untuk mendefenisikan data apa saja yang akan kita minta ke Facebook:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> fbc_userinfo_keys<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #339933;">,</span>
               <span style="color: #0000ff;">'first_name'</span><span style="color: #339933;">,</span>
               <span style="color: #0000ff;">'last_name'</span><span style="color: #339933;">,</span>
               <span style="color: #0000ff;">'proxied_email'</span><span style="color: #339933;">,</span>
               <span style="color: #0000ff;">'profile_url'</span><span style="color: #339933;">,</span>
				<span style="color: #0000ff;">'locale'</span><span style="color: #339933;">,</span>
				<span style="color: #0000ff;">'affiliations'</span><span style="color: #339933;">,</span>
				<span style="color: #0000ff;">'pic_square'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Untuk mendapatkan data user gunakan fungsi berikut ini:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> fbc_user<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$fbuid</span> <span style="color: #339933;">=</span> fbc_facebook_client<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_loggedin_user</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$userinfo</span> <span style="color: #339933;">=</span> fbc_anon_api_client<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">users_getInfo</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fbuid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
                                                   fbc_userinfo_keys<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$userinfo</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$userinfo</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$userinfo</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Contoh menggunakan fungsi di atas untuk mendapatkan data user adalah:</p>
<p>Contoh mendapatkan user id adalah:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$user_id</span> <span style="color: #339933;">=</span> fbc_facebook_client<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_loggedin_user</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Semua fungsi-fungsi di atas kita satukan pada halaman config.php</p>
<p>Berikutnya adalah membuat halaman index.php. Padahalaman ini kita include-kan file config.php. Setelah itu dilakukan pengecekan apakah user sudah terotentifikasi atau belum. Jika belum tampilkan link login dan jika sudah redirect user ke halaman home.php. Link login akan meredirect user ke halaman login pada website Facebook. Berikut adalah kode sumbernya:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'config.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user_id</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Location:home.php?'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'login'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Location:http://www.facebook.com/login.php?api_key='</span><span style="color: #339933;">.</span><span style="color: #000088;">$appapikey</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;v=1.0&amp;next='</span><span style="color: #339933;">.</span><span style="color: #000088;">$this_root</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'home.php?'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;html&gt;&lt;head&gt;&lt;title&gt;Welcome&lt;/title&gt;&lt;/head&gt;&lt;body&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Click &lt;a href=&quot;index.php?login&quot;&gt;here&lt;/a&gt; to login with your Facebook account.'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/body&gt;&lt;/html&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Berikut ini adalah kode sumber untuk halaman home.php:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'config.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user_id</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this_root</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'logout'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	fbc_facebook_client<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">logout</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this_root</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Harap tunggu...'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$userinfo</span> <span style="color: #339933;">=</span> fbc_user<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Welcome <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$userinfo</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
Welcome &lt;a href=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$userinfo</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'profile_url'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>&quot;&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$userinfo</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/a&gt; &lt;a href=&quot;?logout&quot;&gt;Logout&lt;/a&gt;
&lt;br /&gt;
&lt;img src=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$userinfo</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pic_square'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>&quot;&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>Pada contoh ini data user langsung digunakan untuk menampilkan informasi pada browser yang menyatakan ia telah login. Anda bisa memanfaatkan data yang diberikan Facebook dan menyimpannya ke dalam database applikasi Anda. Dengan begikut ketika user kembali login di lain waktu Anda hanya cukup melakukan pengecekan berdasarkan id-nya saja.</p>
<p>Mudah-mudahan panduan sederhana ini bisa bermanfaat buat teman-teman developer sekalian, selamat mencoba.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kandar.info/index.php/php/integrasikan-single-sign-on-sso-facebook-connect-dengan-website-berbasis-php/feed</wfw:commentRss>
		</item>
		<item>
		<title>Integrasi Single Sign On OpenID pada Website berbasis PHP</title>
		<link>http://www.kandar.info/index.php/php/integrasi-single-sign-on-openid-pada-website-berbasis-php</link>
		<comments>http://www.kandar.info/index.php/php/integrasi-single-sign-on-openid-pada-website-berbasis-php#comments</comments>
		<pubDate>Sat, 01 Aug 2009 16:11:07 +0000</pubDate>
		<dc:creator>kandar</dc:creator>
		
		<category><![CDATA[php]]></category>

		<category><![CDATA[sso]]></category>

		<guid isPermaLink="false">http://www.kandar.info/?p=55</guid>
		<description><![CDATA[OpenID adalah sebuah layanan identitas terpusat yang memungkinkan seseorang cukup mempunyai satu identitas untuk bisa mengakses berbagai macam website. Dengan mengintegrasikan aplikasi ini akan memudahkan user yang akan login pada website kita karena ia hanya perlu cukup mengingat satu account saja. Hingga saat ini OpenID sudah di dukung oleh website-webiste besar seperti Google, Yahoo, Wordpress, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://openid.net" target="_blank">OpenID</a> adalah sebuah layanan identitas terpusat yang memungkinkan seseorang cukup mempunyai satu identitas untuk bisa mengakses berbagai macam website. Dengan mengintegrasikan aplikasi ini akan memudahkan user yang akan login pada website kita karena ia hanya perlu cukup mengingat satu account saja. Hingga saat ini OpenID sudah di dukung oleh website-webiste besar seperti Google, Yahoo, Wordpress, VeriSign, AOL dll.<span id="more-55"></span></p>
<p>Pada OpenID terdapat dua tipe OpenID,  yaitu OpenID sebagai identitiy provider dan OpenID sebagai client. OpenID sebagai identity provider adalah applikasi yang memberikan data user yang akan login kepada website yang menjadi OpenID client. Beberapa website yang sudah disebutkan di atas adalah website yang bertindak sebagai identity provider. Sedangkan contoh website yang menjadi OpenID client adalah Facebook, Sourceforge dll.</p>
<p>Dalam panduan berikut kita akan membuat website kita bertindak sebagai OpenID client side. Yang perlu diperhatikan adalah, OpenID menggunakan alamat url sebagai identitas user. Sebagai contoh Worpdress menggunakan http://nama_anda.wordpress.com/, Yahoo menggunakan http://me.yahoo.com/nama_anda dan Google menggunakan Blogspot sebagai OpenID url seperti http://nama_anda.blogspot.com.</p>
<p>Untuk mendapatkan library PHP OpenID Anda bisa mendownload di <a href="http://wiki.openid.net/Libraries" target="_blank">http://wiki.openid.net/Libraries</a>. Dalam panduan ini penulis menggunakan library yang dibuat oleh JanRain (<a href="http://www.openidenabled.com/openid/libraries/php" target="_blank">http://www.openidenabled.com/openid/libraries/php</a>).</p>
<p><a title="OpenID download" href="http://www.kandar.info/dt/openid-simple/openid-simple.tar.gz" target="_blank">Download</a> <a title="OpenID Demo" href="http://www.kandar.info/demo/openid-simple/" target="_blank">Demo</a></p>
<p>Pertama-tama kita akan membuat sebuah halaman index.php yang berisi form login untuk user. Di dalam halaman ini juga dilakukan proses otentifikasi data user. Berikut adalah source codenya:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">&quot;common.php&quot;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$errors</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'submit'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000088;">$openid</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'openid_identifier'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$openid</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #000088;">$errors</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Your OpenID Empty.'</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$errors</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$consumer</span> <span style="color: #339933;">=</span> getConsumer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// Mulai proses otentivikasi OpenID.</span>
		<span style="color: #000088;">$auth_request</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$consumer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$openid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Tampilkan error jika otentvikasi gagal.</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$auth_request</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$errors</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Authentication error; not a valid OpenID.'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$errors</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//Inisial data user yang akan di minta ke OpenID server</span>
		<span style="color: #000088;">$sreg_request</span> <span style="color: #339933;">=</span> Auth_OpenID_SRegRequest<span style="color: #339933;">::</span><span style="color: #004000;">build</span><span style="color: #009900;">&#40;</span>
										 <span style="color: #666666; font-style: italic;">// Required</span>
										 <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'nickname'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
										 <span style="color: #666666; font-style: italic;">// Optional</span>
										 <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'fullname'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$sreg_request</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$auth_request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addExtension</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sreg_request</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Redirect user ke OpenID server.</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$errors</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$auth_request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">shouldSendRedirect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$redirect_url</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$auth_request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirectURL</span><span style="color: #009900;">&#40;</span>getTrustRoot<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
													   getReturnTo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// Tampilkan error jika redirect gagal.</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>Auth_OpenID<span style="color: #339933;">::</span><span style="color: #004000;">isFailure</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$redirect_url</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$errors</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Could not redirect to server: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$redirect_url</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">message</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #666666; font-style: italic;">// Send redirect.</span>
				<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Location: &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$redirect_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// Untuk OpenID 2.0 Generate html.</span>
			<span style="color: #000088;">$form_id</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'openid_message'</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$form_html</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$auth_request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">htmlMarkup</span><span style="color: #009900;">&#40;</span>getTrustRoot<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> getReturnTo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
												   <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$form_id</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">//tampilkan errror jika gagal generate html</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>Auth_OpenID<span style="color: #339933;">::</span><span style="color: #004000;">isFailure</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$form_html</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$errors</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Could not redirect to server: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$form_html</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">message</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #b1b100;">print</span> <span style="color: #000088;">$form_html</span><span style="color: #339933;">;</span>
				<span style="color: #990000;">exit</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'openid'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Location:home.php?'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;html&gt;
&lt;head&gt;&lt;title&gt;PHP OpenID&lt;/title&gt;&lt;/head&gt;
&nbsp;
&lt;body&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$errors</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$errors</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$error</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$error</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;form method=&quot;post&quot; action=&quot;&quot;&gt;
 OpenID URL:
&lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;verify&quot; /&gt;
&lt;input type=&quot;text&quot; name=&quot;openid_identifier&quot; value=&quot;&quot; /&gt;
&lt;input type=&quot;submit&quot; name=&quot;submit&quot; value=&quot;Login&quot; /&gt;
&lt;/form&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>Setelah user mengisikan OpenID url dan melakukan submit, maka data akan diproses oleh OpenID library dan dikirimkan ke OpenID provider menggunakan curl atau fopen. Jika data yang diisikan oleh user valid, maka OpenID provide akan memberikan data respon. Selanjutnya, user akan diridirect ke OpenID provider untuk memberikan konfirmasi ke user untuk memberikan persetujuan pertukaran data  antara OpenID provider dan OpenID client.</p>
<p>Jika user memberikan persetujuan, OpenID server akan meredirect user kembali ke OpenID client. Pada OpenID client kembali terjadi pertukaran data antara  OpenID provider dan OpenID client untuk mendapatkan data user yang diminta oleh OpenID client.</p>
<p>Berikut adalah code untuk halaman finish_auth.php yang menerima respon dari OpenID server setelah user memberikan persetujuan.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">&quot;common.php&quot;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> escape<span style="color: #009900;">&#40;</span><span style="color: #000088;">$thing</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #990000;">htmlentities</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$thing</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$consumer</span> <span style="color: #339933;">=</span> getConsumer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Complete the authentication process using the server's</span>
    <span style="color: #666666; font-style: italic;">// response.</span>
    <span style="color: #000088;">$return_to</span> <span style="color: #339933;">=</span> getReturnTo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$response</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$consumer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">complete</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$return_to</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Check the response status.</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">status</span> <span style="color: #339933;">==</span> Auth_OpenID_CANCEL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// This means the authentication was cancelled.</span>
        <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Verification cancelled.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">status</span> <span style="color: #339933;">==</span> Auth_OpenID_FAILURE<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Authentication failed; display the error message.</span>
        <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'OpenID authentication failed: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">message</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">status</span> <span style="color: #339933;">==</span> Auth_OpenID_SUCCESS<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// This means the authentication succeeded; extract the</span>
        <span style="color: #666666; font-style: italic;">// identity URL and Simple Registration data (if it was</span>
        <span style="color: #666666; font-style: italic;">// returned).</span>
        <span style="color: #000088;">$openid</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDisplayIdentifier</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$esc_identity</span> <span style="color: #339933;">=</span> escape<span style="color: #009900;">&#40;</span><span style="color: #000088;">$openid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$sreg_resp</span> <span style="color: #339933;">=</span> Auth_OpenID_SRegResponse<span style="color: #339933;">::</span><span style="color: #004000;">fromSuccessResponse</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$response</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$sreg</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$sreg_resp</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">contents</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		do_login<span style="color: #009900;">&#40;</span><span style="color: #000088;">$esc_identity</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sreg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> do_login<span style="color: #009900;">&#40;</span><span style="color: #000088;">$openid</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sreg</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'openid'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$openid</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Location:home.php?'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Kini user sudah berada pada halaman home.php yang itu berarti user sudah memiliki otoritas. Berikut adalah code dari file home.php:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Location:index.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'logout'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">session_destroy</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Location:index.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$openid</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'openid'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;html&gt;
&lt;head&gt;&lt;title&gt;Welcome <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$openid</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
	Selamat datang <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$openid</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span> &lt;a href=&quot;?logout&quot;&gt;Logout&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Selain tiga file ini, kita juga membuthkan file common.php dan semua isi folder Auth yang bisa didapatkan dari  JanRain PHP library.</p>
<p>Kini website Anda sudah terintegrasi dengan OpenID. Selamat mencoba.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kandar.info/index.php/php/integrasi-single-sign-on-openid-pada-website-berbasis-php/feed</wfw:commentRss>
		</item>
		<item>
		<title>WordPress MU Latest Posts</title>
		<link>http://www.kandar.info/index.php/plugin/wordpress-mu-latest-posts</link>
		<comments>http://www.kandar.info/index.php/plugin/wordpress-mu-latest-posts#comments</comments>
		<pubDate>Wed, 06 May 2009 10:03:32 +0000</pubDate>
		<dc:creator>kandar</dc:creator>
		
		<category><![CDATA[plugin]]></category>

		<category><![CDATA[latest post]]></category>

		<category><![CDATA[mu]]></category>

		<category><![CDATA[wordpress]]></category>

		<category><![CDATA[wordpressmu]]></category>

		<guid isPermaLink="false">http://www.kandar.info/index.php/uncategorized/wordpress-mu-latest-posts</guid>
		<description><![CDATA[This plugin get all latest post truly ordered by date or by posting modified date. How this plugin works are: First, get all posts in last 30 days (by default). Then, all this post transformed as array data. We use posting date as key array. After that, we short this array data and ordered by [...]]]></description>
			<content:encoded><![CDATA[<p>This plugin get all latest post truly ordered by date or by posting modified date. How this plugin works are: First, get all posts in last 30 days (by default). Then, all this post transformed as array data. We use posting date as key array. After that, we short this array data and ordered by the key (date).<span id="more-46"></span></p>
<p>By this method we can get truly latest post from entire blogs ordered by posting date or modified date.</p>
<p><a title="Download" href="http://wpmudev.org/project/wordpress-mu-latest-posts" target="_blank"><strong>Download</strong></a></p>
<p><strong>Feature</strong></p>
<ul>
<li>Get truly all latest post from entire blogs</li>
</ul>
<ul>
<li>You can either ordered by posting date or by posting modified date</li>
</ul>
<ul>
<li>You can defined how much words that you like to appear as teaser.</li>
</ul>
<ul>
<li>You can either make your teaser clean from any html tag or not.</li>
</ul>
<ul>
<li>Get author name</li>
</ul>
<ul>
<li>Get author url</li>
</ul>
<ul>
<li>Get total post comments</li>
</ul>
<p><strong>Parameters</strong></p>
<ul>
<li><strong>$start_from</strong>: where array data start form.</li>
</ul>
<ul>
<li><strong>$how_many</strong> (integer): how many array data are being to shorted.</li>
</ul>
<ul>
<li><strong>$how_long_day</strong> (integer): time frame to choose recent posts from (in days).</li>
</ul>
<ul>
<li><strong>$how_many_to_appear</strong> (integer): how many recent posts are being displayed.</li>
</ul>
<ul>
<li><strong>how_many_words</strong> (integer): how many post&#8217;s teaser are being displayed. Count by word. Default value are 50 words.</li>
</ul>
<ul>
<li><strong>$clean_post</strong> (boolean): set true to remove any html tag within the post.</li>
</ul>
<ul>
<li><strong>$short_by</strong> (string - post_date/post_modified): You can short the lattest post by positing date (post_date) or posting update (post_modified).</li>
</ul>
<p><strong>Return</strong></p>
<ul>
<li>ID</li>
</ul>
<ul>
<li>guid</li>
</ul>
<ul>
<li>post_title</li>
</ul>
<ul>
<li>post_content</li>
</ul>
<ul>
<li>author_url</li>
</ul>
<ul>
<li>author_name</li>
</ul>
<ul>
<li>post_date</li>
</ul>
<ul>
<li>post_time</li>
</ul>
<ul>
<li>comment_count</li>
</ul>
<p><strong>example 1</strong><br />
Default config<br />
10 most recent entries over the past 30 days, displaying titles only</p>
<div class="programlisting">$latest_posts = wpmu_latest_post();<br />
foreach($latest_posts as $latest_post){</p>
<p>echo &#8216;&lt;p&gt;&#8217;.$latest_post-&gt;post_title.&#8217;&lt;/p&gt;&#8217;;<br />
}</p></div>
<p><strong>example 2</strong><br />
5 most recent entries over the past 10 days, displaying titles, date, time, author, post url and first 30 words post as clean (without any html tag) teaser and order by most posting date.</p>
<div class="programlisting">$start_from = null;<br />
$how_many = null;<br />
$how_long_day = 10;<br />
$how_many_to_appear = 5;<br />
$how_many_words = 30;<br />
$clean_post = null;<br />
$short_by = &#8216;post_date&#8217;;</p>
<p>$latest_posts = wpmu_latest_post($start_from, $how_many, $how_long_day, $how_many_to_appear, $how_many_words, $clean_post, $short_by);<br />
foreach($latest_posts as $latest_post){</p>
<p>echo &#8216;&lt;p&gt;&lt;a href=&#8221;&#8216;.$latest_post-&gt;guid.&#8217;&#8221;&gt;&#8217;.$latest_post-&gt;post_title.&#8217;&lt;/a&gt; - &#8216;.mysql2date(get_option(&#8217;date_format&#8217;),$latest_post-&gt;post_date).&#8217; &#8216;.mysql2date(get_option(&#8217;time_format&#8217;),$latest_post-&gt;post_date).&#8217; - by &#8216;.$latest_post-&gt;author_name.&#8217;&lt;/p&gt;&#8217;;<br />
echo &#8216;&lt;p&gt;&#8217;.$latest_post-&gt;post_title.&#8217;&lt;/p&gt;&#8217;;<br />
echo &#8216;&lt;p&gt;&#8217;.$latest_post-&gt;post_content.&#8217;&lt;/p&gt;&#8217;;<br />
}</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.kandar.info/index.php/plugin/wordpress-mu-latest-posts/feed</wfw:commentRss>
		</item>
		<item>
		<title>How to Create Ajax Comment</title>
		<link>http://www.kandar.info/index.php/ajax/how-to-create-ajax-comment</link>
		<comments>http://www.kandar.info/index.php/ajax/how-to-create-ajax-comment#comments</comments>
		<pubDate>Tue, 28 Apr 2009 15:11:01 +0000</pubDate>
		<dc:creator>kandar</dc:creator>
		
		<category><![CDATA[ajax]]></category>

		<category><![CDATA[Comment ajax commenting javascript php]]></category>

		<guid isPermaLink="false">http://www.kandar.info/?p=43</guid>
		<description><![CDATA[When you read this article, maybe you already have facebook account. In this social networking site we can commenting anythings. Every friends has a new status, we can write a comment. If one of our friends changed his/her photo, we can put a comment. More, one of the reason why we still come back to [...]]]></description>
			<content:encoded><![CDATA[<p>When you read this article, maybe you already have facebook account. In this social networking site we can commenting anythings. Every friends has a new status, we can write a comment. If one of our friends changed his/her photo, we can put a comment. More, one of the reason why we still come back to this site is because this feature.</p>
<p>According my estimated, almost 80% from all application process on facebook using Ajax method. So do with commenting application. When we click submit button after write a comment, the new comment will suddenly appear without reloading the page. While the new comment proceed to appear, saving data to database are working in back-and. How this process could be happen? I&#8217;ll explain you in this article.<span id="more-43"></span></p>
<p>Before read the rest, you can try the live demo or download the source code by clicking the link bellow.</p>
<p><a title="Ajax Comment Demo" href="http://www.kandar.info/demo/ajax-comment/" target="_blank">DEMO</a> | <a href="http://www.kandar.info/dt/ajax-comment/ajax-comment.tar.gz">DOWNLOAD</a></p>
<p><strong>Adding Comment Process</strong></p>
<p>To make appear the new comment without reloading the page, we need to get existing comment. To do this we can use a Javascript method:</p>
<div class="programlisting">document.getelementbyId(&#8217;name_id&#8217;).innerHTML;</div>
<p>Name_id is a div name placed between existed comment. For example:</p>
<div class="programlisting">&lt;div id=&#8221;CommentList&#8221;&gt;<br />
&lt;!&#8211; list start &#8211;&gt;<br />
&lt;div class=&#8221;Comment&#8221; id=&#8221;1&#8243;&gt;<br />
&lt;div class=&#8221;SenderName&#8221;&gt;Kandar&lt;/div&gt;<br />
&lt;div class=&#8221;CommentDate&#8221;&gt;23, April 2009&lt;/div&gt;<br />
&lt;div class=&#8221;CommentContent&#8221;&gt;This is my comment&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;div class=&#8221;Comment&#8221; id=&#8221;2&#8243;&gt;<br />
&lt;div class=&#8221;SenderName&#8221;&gt;Foo&lt;/div&gt;<br />
&lt;div class=&#8221;CommentDate&#8221;&gt;24, April 2009&lt;/div&gt;<br />
&lt;div class=&#8221;CommentContent&#8221;&gt;hellow world&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;div class=&#8221;Comment&#8221; id=&#8221;3&#8243;&gt;<br />
&lt;div class=&#8221;SenderName&#8221;&gt;Kandar&lt;/div&gt;<br />
&lt;div class=&#8221;CommentDate&#8221;&gt;23, April 2009&lt;/div&gt;<br />
&lt;div class=&#8221;CommentContent&#8221;&gt;This is kandar&#8217;s comment.r&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;!&#8211;list end&#8211;&gt;<br />
&lt;/div&gt;</div>
<p>To get all comment start form &lt;!&#8211; list start&#8211;$gt; to &lt;!&#8211;list end&#8211;&gt; we use method:</p>
<div class="programlisting">document.getElementById(&#8217;CommentList&#8217;).innerHTML;</div>
<p>We can make a new variable named currentContent from this method:</p>
<div class="programlisting">var currentContent = document.getElementById(&#8217;CommentList&#8217;).innerHTML;</div>
<p>Next, we need a variable to get value from comment form. This variable named commentValue.</p>
<div class="programlisting">var commentValue = &#8216;name=&#8217; + encodeURI( document.getElementById(&#8217;name&#8217;).value ) + &#8216;&amp;YourComment=&#8217; + encodeURI( document.getElementById(&#8217;YourComment&#8217;).value );</div>
<p>To make this variable works, we need to create a form. The code is:</p>
<div class="programlisting">&lt;form name=&#8221;CommentForm&#8221; id=&#8221;CommentForm&#8221; class=&#8221;cssform&#8221; action=&#8221;javascript:postContent()&#8221; method=&#8221;post&#8221; /&gt;<br />
&lt;p&gt;&lt;label for=&#8221;name&#8221;&gt;Name:&lt;/label&gt; &lt;input type=&#8221;text&#8221; name=&#8221;name&#8221; id=&#8221;name&#8221; /&gt;<br />
&lt;p&gt;&lt;label for=&#8221;YourComment&#8221;&gt;Comment:&lt;/label&gt; &lt;textarea name=&#8221;YourComment&#8221; id=&#8221;YourComment&#8221; /&gt;&lt;/textarea&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;input name=&#8221;Submit&#8221; type=&#8221;submit&#8221; value=&#8221;Submit&#8221; /&gt;&lt;/p&gt;<br />
&lt;/form&gt;</div>
<p>Next, we have to create a function named postContents. The code goes like this:</p>
<div class="programlisting">function postContent(){</p>
<p>/* Query value that send to php.*/</p>
<p>var commentValue = &#8216;name=&#8217; + encodeURI( document.getElementById(&#8217;name&#8217;).value ) + &#8216;&amp;YourComment=&#8217; + encodeURI( document.getElementById(&#8217;YourComment&#8217;).value );</p>
<p>/*server side */</p>
<p>var send_to = &#8216;manage-comment.php&#8217;;</p>
<p>/*Div id for handle preloader image or errors.*/</p>
<p>var respons = &#8216;alert&#8217;;</p>
<p>postAjax(send_to, commentValue, respons, handleResponComment);</p>
<p>}</p></div>
<p>In the function above, we got a new function called postAjax. This is the function to send the value with Ajax method. For this process, we need a function to heandle XmlHttRequest.</p>
<div class="programlisting">var xmlHttp = createXmlHttpRequest();</p>
<p>var obj = &#8221;;</p>
<p>function createXmlHttpRequest() {</p>
<p>var xmlHttp = false;</p>
<p>if (window.ActiveXObject) {</p>
<p>xmlHttp = new ActiveXObject(&#8221;Microsoft.XMLHTTP&#8221;);</p>
<p>} else {</p>
<p>xmlHttp = new XMLHttpRequest();</p>
<p>}</p>
<p>if (!xmlHttp) {</p>
<p>alert(&#8221;Ops sorry We found some error!!&#8221;);</p>
<p>}</p>
<p>return xmlHttp;</p>
<p>}</p></div>
<p>Next, we need a function that works as a response handler after XmlHttpRequest process. We named this function  handleResponComment. The code:</p>
<div class="programlisting">function handleResponComment(){</p>
<p>if (xmlHttp.readyState == 4){</p>
<p>if (xmlHttp.status == 200){</p>
<p>/*I more prefer use json as response value from php*/</p>
<p>var JSONRespons = eval(&#8217;(&#8217; + xmlHttp.responseText + &#8216;)&#8217;);</p>
<p>if(JSONRespons.status == 1){</p>
<p>/*</p>
<p>* if inserting new commend succeed, then we call commentResponse function to show the new comment.</p>
<p>*/</p>
<p>commentResponse(JSONRespons);</p>
<p>}</p>
<p>else{</p>
<p>/*when new comment appeared, we have to re-enabel the form by calling enableForm() function using onload image event*/</p>
<p>document.getElementById(obj).innerHTML = JSONRespons.message + &#8216;&lt;img src=&#8221;ajax-loading.gif&#8221; width=&#8221;0&#8243; height=&#8221;0&#8243; onload=&#8221;enableForm();&#8221;&gt;&#8217;;</p>
<p>}</p>
<p>} else {</p>
<p>/*Incase we found errors on trancaction proccess.*/</p>
<p>document.getElementById(obj).innerHTML = &#8216;Error: &#8216; + xmlHttp.statusText;</p>
<p>}</p>
<p>}</p>
<p>else{</p>
<p>/*</p>
<p>* After submit new comment, we heve to diasable the form to prevent from re-submitng by user.</p>
<p>* Also, show the preloader image, so user know his comment is being proceed.</p>
<p>*/</p>
<p>document.getElementById(obj).innerHTML = &#8216;&lt;img src=&#8221;ajax-loading.gif&#8221;&gt;&#8217;;</p>
<p>document.getElementById(&#8217;name&#8217;).disabled=true;</p>
<p>document.getElementById(&#8217;YourComment&#8217;).disabled=true;</p>
<p>document.getElementById(&#8217;submit&#8217;).disabled=true;</p>
<p>}</p>
<p>}</p></div>
<p>To prevent user re-submit the form, we need to disable the form after they clicked the submit button. After all process done we have to activated the form again. The functions are:</p>
<div class="programlisting">function enableForm(){</p>
<p>/*re-enable the form after all process done. */</p>
<p>document.getElementById(&#8217;name&#8217;).disabled=false;</p>
<p>document.getElementById(&#8217;YourComment&#8217;).disabled=false;</p>
<p>document.getElementById(&#8217;submit&#8217;).disabled=false;</p>
<p>}</p></div>
<p>After saving new comment process works, its time to make appear new comment that just submitted. The function goes like this:</p>
<div class="programlisting">function commentResponse(JSONRespons){</p>
<p>/*get listed comments*/</p>
<p>var current_contents = document.getElementById(&#8217;CommentList&#8217;).innerHTML;</p>
<p>/*Listed comments plus new comment that submited by user and inserted to database. */</p>
<p>var newComment = current_contents + &#8216;&lt;div class=&#8221;Comment&#8221; id=&#8221;&#8216; + JSONRespons.message_id + &#8216;&#8221;&gt;&lt;div class=&#8221;Remove&#8221;&gt;&lt;a href=&#8221;javascript:deleteContent(&#8217; + JSONRespons.message_id + &#8216;);&#8221;&gt;Remove&lt;/a&gt;&lt;/div&gt;&lt;div class=&#8221;SenderName&#8221;&gt;&lt;img src=&#8221;ajax-loading.gif&#8221; width=&#8221;0&#8243; height=&#8221;0&#8243; onload=&#8221;enableForm();&#8221;&gt;&#8217; + JSONRespons.name + &#8216;&lt;/div&gt;&lt;div class=&#8221;CommentDate&#8221;&gt;&#8217; + JSONRespons.date + &#8216;&lt;/div&gt;&lt;div class=&#8221;CommentContent&#8221;&gt;&#8217; + JSONRespons.comment + &#8216;&lt;/div&gt;&lt;/div&gt;&#8217;;</p>
<p>/*get current total comment */</p>
<p>var currTotalComm = document.getElementById(&#8217;numComment&#8217;).innerHTML;</p>
<p>/*current comment plus one */</p>
<p>document.getElementById(&#8217;numComment&#8217;).innerHTML = parseInt(currTotalComm) + parseInt(1);</p>
<p>/*show up the new listed comments*/</p>
<p>document.getElementById(&#8217;CommentList&#8217;).innerHTML = newComment;</p>
<p>/*reset the form*/</p>
<p>document.getElementById(&#8217;CommentForm&#8217;).reset();</p>
<p>/*remove the preloader image*/</p>
<p>document.getElementById(&#8217;alert&#8217;).innerHTML = &#8221;;</p>
<p>}</p></div>
<p><strong>Deleting Comment Process</strong></p>
<p>Here is the three function that works to handle deleting process.</p>
<div class="programlisting">function deleteContent(messageID){</p>
<p>var postValue = &#8216;id=&#8217; + messageID;</p>
<p>var send_to = &#8216;manage-comment.php&#8217;;</p>
<p>var respons = &#8216;alert&#8217;;</p>
<p>input_box = window.confirm(&#8217;Are you sure want to delete this comment?&#8217;);</p>
<p>if (input_box==true){</p>
<p>postAjax(send_to, postValue, respons, handleDeletedComment);</p>
<p>}</p>
<p>}</p>
<p>function handleDeletedComment(){</p>
<p>if (xmlHttp.readyState == 4){</p>
<p>if (xmlHttp.status == 200){</p>
<p>var JSONRespons = eval(&#8217;(&#8217; + xmlHttp.responseText + &#8216;)&#8217;);</p>
<p>if(JSONRespons.status == 1){</p>
<p>deleteNow(JSONRespons.id);</p>
<p>}</p>
<p>else{</p>
<p>document.getElementById(obj).innerHTML = JSONRespons.message;</p>
<p>}</p>
<p>} else {</p>
<p>document.getElementById(obj).innerHTML = &#8216;Error: &#8216; + xmlHttp.statusText;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>function deleteNow(id){</p>
<p>var delete_comment = document.getElementById(id);</p>
<p>var currTotalComm = document.getElementById(&#8217;numComment&#8217;).innerHTML;</p>
<p>document.getElementById(&#8217;numComment&#8217;).innerHTML = parseInt(currTotalComm) - parseInt(1);</p>
<p>delete_comment.parentNode.removeChild(delete_comment);</p>
<p>enableForm();</p>
<p>document.getElementById(&#8217;alert&#8217;).innerHTML = &#8221;;</p>
<p>}</p></div>
<p>In back-and side, all process handle in manage-comment.php file.</p>
<p>So here is the guideline how to create Ajax comment. Hope this is can help you. Thanks for reading.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kandar.info/index.php/ajax/how-to-create-ajax-comment/feed</wfw:commentRss>
		</item>
		<item>
		<title>Membuat Comment Ajax</title>
		<link>http://www.kandar.info/index.php/ajax/membuat-comment-ajax</link>
		<comments>http://www.kandar.info/index.php/ajax/membuat-comment-ajax#comments</comments>
		<pubDate>Sat, 25 Apr 2009 17:17:04 +0000</pubDate>
		<dc:creator>kandar</dc:creator>
		
		<category><![CDATA[ajax]]></category>

		<category><![CDATA[Comment ajax commenting javascript php]]></category>

		<guid isPermaLink="false">http://www.kandar.info/?p=34</guid>
		<description><![CDATA[Hampir dari kita semua pasti telah memiliki account facebook. Pada situs jejaring sosial ini, apapun bisa kita komentari. Setiap kali ada teman ganti status kita bisa langsung beri komentar. Kalau ada teman yang baru ganti foto, kita bisa langsung beri komentar. Justru karena komentar-komentar inilah yang menjadikan kita kembali mengunjungi situs ini.
Menurut perkiraan saya, hampir [...]]]></description>
			<content:encoded><![CDATA[<p>Hampir dari kita semua pasti telah memiliki account facebook. Pada situs jejaring sosial ini, apapun bisa kita komentari. Setiap kali ada teman ganti status kita bisa langsung beri komentar. Kalau ada teman yang baru ganti foto, kita bisa langsung beri komentar. Justru karena komentar-komentar inilah yang menjadikan kita kembali mengunjungi situs ini.</p>
<p>Menurut perkiraan saya, hampir 80% dari proses apalikasi yang ada pada facebook menggunakan pendekatan ajax. Begitu pula dengan aplikasi komentarnya. Ketika kita menekan tombol submit setelah menuliskan komentar, tanpa ada proses refresh halaman, komentar kita akan secara otomatis muncul dan berbarengan dengan itu di simpan juga ke dalam database. Bagaimana kah proses ini bisa terjadi? Saya akan menjelaskannya berikut ini.<span id="more-34"></span></p>
<p><a title="Ajax Comment Demo" href="http://www.kandar.info/demo/ajax-comment/" target="_blank">DEMO</a> | <a href="http://www.kandar.info/dt/ajax-comment/ajax-comment.tar.gz">DOWNLOAD</a></p>
<p><strong>Proses menambahkan komentar</strong></p>
<p>Untuk bisa menampilkan komentar yang baru saja kita tulis tanpa perlu refresh halaman, kita perlu mendapatkan komentar-komentar yang sudah diposting sebelumnya. Untuk mendapatkannya kita menggunakan:</p>
<div class="programlisting">document.getelementbyId(&#8217;nama_id&#8217;).innerHTML;</div>
<p>Nama_id di sini adalah div yang berada di antara semua komentar yang sudah ada. Contohnya adalah sebagai berikut:</p>
<div class="programlisting">&lt;div id=&#8221;CommentList&#8221;&gt;<br />
&lt;!&#8211; list start &#8211;&gt;<br />
&lt;div class=&#8221;Comment&#8221; id=&#8221;1&#8243;&gt;<br />
&lt;div class=&#8221;SenderName&#8221;&gt;Kandar&lt;/div&gt;<br />
&lt;div class=&#8221;CommentDate&#8221;&gt;23, April 2009&lt;/div&gt;<br />
&lt;div class=&#8221;CommentContent&#8221;&gt;Ini komentar dari kandar&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;div class=&#8221;Comment&#8221; id=&#8221;2&#8243;&gt;<br />
&lt;div class=&#8221;SenderName&#8221;&gt;Foo&lt;/div&gt;<br />
&lt;div class=&#8221;CommentDate&#8221;&gt;24, April 2009&lt;/div&gt;<br />
&lt;div class=&#8221;CommentContent&#8221;&gt;hellow world&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;div class=&#8221;Comment&#8221; id=&#8221;3&#8243;&gt;<br />
&lt;div class=&#8221;SenderName&#8221;&gt;Kandar&lt;/div&gt;<br />
&lt;div class=&#8221;CommentDate&#8221;&gt;23, April 2009&lt;/div&gt;<br />
&lt;div class=&#8221;CommentContent&#8221;&gt;Ini komentar dari kandar&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;!&#8211;list end&#8211;&gt;<br />
&lt;/div&gt;</div>
<p>Untuk mendapatkan seluruh isi dimulai dari komentar list start hingga list end kita gunakan method</p>
<div class="programlisting">document.getElementById(&#8217;CommentList&#8217;).innerHTML;</div>
<p>Untuk mendapatkan komentar yang telah ada kita buat satu variable dengan nama  currentContent.</p>
<div class="programlisting">var currentContent = document.getElementById(&#8217;CommentList&#8217;).innerHTML;</div>
<p>Berikutnya kita membuthkan sebuah variabel yang berfungsi untuk menginisialisasi nilai dari form komentar. Variabel ini bertugas mendapatkan nilai dari input nama dan isi komentar. Variabel ini kita beri nama commentValue.</p>
<div class="programlisting">var commentValue = &#8216;name=&#8217; + encodeURI( document.getElementById(&#8217;name&#8217;).value ) + &#8216;&amp;YourComment=&#8217; + encodeURI( document.getElementById(&#8217;YourComment&#8217;).value );</div>
<p>Agar variabel ini bisa berfungsi, kita harus membuat sebuh form html. Berikut adalah kodenya:</p>
<div class="programlisting">&lt;form name=&#8221;CommentForm&#8221; id=&#8221;CommentForm&#8221; class=&#8221;cssform&#8221; action=&#8221;javascript:postContent()&#8221; method=&#8221;post&#8221; /&gt;<br />
&lt;p&gt;&lt;label for=&#8221;name&#8221;&gt;Name:&lt;/label&gt; &lt;input type=&#8221;text&#8221; name=&#8221;name&#8221; id=&#8221;name&#8221; /&gt;<br />
&lt;p&gt;&lt;label for=&#8221;YourComment&#8221;&gt;Comment:&lt;/label&gt; &lt;textarea name=&#8221;YourComment&#8221; id=&#8221;YourComment&#8221; /&gt;&lt;/textarea&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;input name=&#8221;Submit&#8221; type=&#8221;submit&#8221; value=&#8221;Submit&#8221; /&gt;&lt;/p&gt;<br />
&lt;/form&gt;</div>
<p>Langkah berikutnya adalah membuat suatu fungsi javascript yang bernama postContents yang salah satu isinya adalah variabel commentValue. Kodenya adalah sebagai berikut:</p>
<div class="programlisting">function postContent(){</p>
<p>/* Query yang nilainya akan dikirim ke php.*/</p>
<p>var commentValue = &#8216;name=&#8217; + encodeURI( document.getElementById(&#8217;name&#8217;).value ) + &#8216;&amp;YourComment=&#8217; + encodeURI( document.getElementById(&#8217;YourComment&#8217;).value );</p>
<p>/* File php yang bertugas melalukan proses penyumpanan. */</p>
<p>var send_to = &#8216;manage-comment.php&#8217;;</p>
<p>/*Div id untuk menampilan gambar preloader dan error.*/</p>
<p>var respons = &#8216;alert&#8217;;</p>
<p>postAjax(send_to, commentValue, respons, handleResponComment);</p>
<p>}</p></div>
<p>Selain variabel commentValue, di dalam fungsi postContent kita mendapatkan sebuah fungsi bernama postAjax. Ini adalah fungsi yang mengirimkan nila variabel commentValue dengan metode Ajax. Untuk itu kita membuthkan suatu fungsi yang bertugas yang menginisialisasi XmlHttpRequest. Berikut adalah fungsingya:</p>
<div class="programlisting">var xmlHttp = createXmlHttpRequest();<br />
var obj = &#8221;;</p>
<p>function createXmlHttpRequest() {<br />
var xmlHttp = false;<br />
if (window.ActiveXObject) {<br />
xmlHttp = new ActiveXObject(&#8221;Microsoft.XMLHTTP&#8221;);<br />
} else {<br />
xmlHttp = new XMLHttpRequest();<br />
}<br />
if (!xmlHttp) {<br />
alert(&#8221;Ops sorry We found some error!!&#8221;);<br />
}<br />
return xmlHttp;<br />
}</p></div>
<p>Selanjutnya kita membuthkan sebuah fungsi yang bertugas untuk menerima respon setelah terjadi proses XmlHttpRequest. Fungsi ini kita beri nama handleResponComment berikut adalah kodenya:</p>
<div class="programlisting">function handleResponComment(){</p>
<p>if (xmlHttp.readyState == 4){</p>
<p>if (xmlHttp.status == 200){</p>
<p>/* Untuk menerima respon balik dari php, kita menggunakan JSON. */</p>
<p>var JSONRespons = eval(&#8217;(&#8217; + xmlHttp.responseText + &#8216;)&#8217;);</p>
<p>if(JSONRespons.status == 1){</p>
<p>/*</p>
<p>* Jika penyimpanan data ke dalam database telah berhasil, proses selanjutnya adalah memanggil fungsi  commentResponse.<br />
*/</p>
<p>commentResponse(JSONRespons);</p>
<p>}</p>
<p>else{</p>
<p>/*Jika komentar baru sudah muncul, form kita aktifkan kembali dengan memanggil fungsi enableForm() dengan menggunakan event onload pada image.*/</p>
<p>document.getElementById(obj).innerHTML = JSONRespons.message + &#8216;&lt;img src=&#8221;ajax-loading.gif&#8221; width=&#8221;0&#8243; height=&#8221;0&#8243; onload=&#8221;enableForm();&#8221;&gt;&#8217;;</p>
<p>}</p>
<p>} else {</p>
<p>/* Tampilkan error jika ada.*/</p>
<p>document.getElementById(obj).innerHTML = &#8216;Error: &#8216; + xmlHttp.statusText;</p>
<p>}</p>
<p>}</p>
<p>else{</p>
<p>/*</p>
<p>* Nonaktifkan form sesaat setelah user menekan tombol submit.<br />
* Munculkan juga image preloader.<br />
*/</p>
<p>document.getElementById(obj).innerHTML = &#8216;&lt;img src=&#8221;ajax-loading.gif&#8221;&gt;&#8217;;</p>
<p>document.getElementById(&#8217;name&#8217;).disabled=true;</p>
<p>document.getElementById(&#8217;YourComment&#8217;).disabled=true;</p>
<p>document.getElementById(&#8217;submit&#8217;).disabled=true;</p>
<p>}</p>
<p>}</p></div>
<p>untuk mencegah user menekan tombol submit kembali,  selama proses berlangsung, form kita nonaktifkan dahulu. Jika semua proses telah selesai kita membuthkan sebuah fungsi yang bertugas untuk kembali mengaktifkan form. Berikut adalah fungsinya:</p>
<div class="programlisting">function enableForm(){</p>
<p>/* Mengaktifkan kembali form jika semua proses telah selesai. */</p>
<p>document.getElementById(&#8217;name&#8217;).disabled=false;</p>
<p>document.getElementById(&#8217;YourComment&#8217;).disabled=false;</p>
<p>document.getElementById(&#8217;submit&#8217;).disabled=false;</p>
<p>}</p></div>
<p>Jika semua proses penyumpanan komentar baru telah berhasil, sekarang waktunya untuk menampilkan komentar yang baru saja di tambahkan oleh user. Berikut adalah fungsingya:</p>
<div class="programlisting">function commentResponse(JSONRespons){</p>
<p>/*Melist komentar yang telah ada.*/</p>
<p>var current_contents = document.getElementById(&#8217;CommentList&#8217;).innerHTML;</p>
<p>/* List komentar yang telah ada ditambah komentar baru. */</p>
<p>var newComment = current_contents + &#8216;&lt;div class=&#8221;Comment&#8221; id=&#8221;&#8216; + JSONRespons.message_id + &#8216;&#8221;&gt;&lt;div class=&#8221;Remove&#8221;&gt;&lt;a href=&#8221;javascript:deleteContent(&#8217; + JSONRespons.message_id + &#8216;);&#8221;&gt;Remove&lt;/a&gt;&lt;/div&gt;&lt;div class=&#8221;SenderName&#8221;&gt;&lt;img src=&#8221;ajax-loading.gif&#8221; width=&#8221;0&#8243; height=&#8221;0&#8243; onload=&#8221;enableForm();&#8221;&gt;&#8217; + JSONRespons.name + &#8216;&lt;/div&gt;&lt;div class=&#8221;CommentDate&#8221;&gt;&#8217; + JSONRespons.date + &#8216;&lt;/div&gt;&lt;div class=&#8221;CommentContent&#8221;&gt;&#8217; + JSONRespons.comment + &#8216;&lt;/div&gt;&lt;/div&gt;&#8217;;</p>
<p>/* Mendapatkan total komentar saat ini*/</p>
<p>var currTotalComm = document.getElementById(&#8217;numComment&#8217;).innerHTML;</p>
<p>/* Total komentar saat ini ditambah satu.*/</p>
<p>document.getElementById(&#8217;numComment&#8217;).innerHTML = parseInt(currTotalComm) + parseInt(1);</p>
<p>/*Munculkan semua komentar, termasuk yang baru saja ditambahkan.*/</p>
<p>document.getElementById(&#8217;CommentList&#8217;).innerHTML = newComment;</p>
<p>/* reset form.*/</p>
<p>document.getElementById(&#8217;CommentForm&#8217;).reset();</p>
<p>/* Hilangkan image preloader.*/</p>
<p>document.getElementById(&#8217;alert&#8217;).innerHTML = &#8221;;</p>
<p>}</p></div>
<p><strong>Proses menghapus komentar</strong></p>
<p>Berikut ini adalah tiga buah fungsi yang bertugas untuk menangani proses penghapusan komentar.</p>
<div class="programlisting">function deleteContent(messageID){</p>
<p>var postValue = &#8216;id=&#8217; + messageID;</p>
<p>var send_to = &#8216;manage-comment.php&#8217;;</p>
<p>var respons = &#8216;alert&#8217;;</p>
<p>input_box = window.confirm(&#8217;Are you sure want to delete this comment?&#8217;);</p>
<p>if (input_box==true){</p>
<p>postAjax(send_to, postValue, respons, handleDeletedComment);</p>
<p>}</p>
<p>}</p>
<p>function handleDeletedComment(){</p>
<p>if (xmlHttp.readyState == 4){</p>
<p>if (xmlHttp.status == 200){</p>
<p>var JSONRespons = eval(&#8217;(&#8217; + xmlHttp.responseText + &#8216;)&#8217;);</p>
<p>if(JSONRespons.status == 1){</p>
<p>deleteNow(JSONRespons.id);</p>
<p>}</p>
<p>else{</p>
<p>document.getElementById(obj).innerHTML = JSONRespons.message;</p>
<p>}</p>
<p>} else {</p>
<p>document.getElementById(obj).innerHTML = &#8216;Error: &#8216; + xmlHttp.statusText;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>function deleteNow(id){</p>
<p>var delete_comment = document.getElementById(id);</p>
<p>var currTotalComm = document.getElementById(&#8217;numComment&#8217;).innerHTML;</p>
<p>document.getElementById(&#8217;numComment&#8217;).innerHTML = parseInt(currTotalComm) - parseInt(1);</p>
<p>delete_comment.parentNode.removeChild(delete_comment);</p>
<p>enableForm();</p>
<p>document.getElementById(&#8217;alert&#8217;).innerHTML = &#8221;;</p>
<p>}</p></div>
<p>Untuk proses yang ditangani php, semuanya ada pada file manage-comment.php.</p>
<p>Demikian panduan Comment Ajax ini dibuat, semoga bisa membantu para teman-teman developer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kandar.info/index.php/ajax/membuat-comment-ajax/feed</wfw:commentRss>
		</item>
		<item>
		<title>Mencegah Kembali Login Setelah Loguot dengan Menekan Tombol Back pada Browser</title>
		<link>http://www.kandar.info/index.php/php/mencegah-kembali-login-setelah-loguot-dengan-menekan-tombol-back-pada-browser</link>
		<comments>http://www.kandar.info/index.php/php/mencegah-kembali-login-setelah-loguot-dengan-menekan-tombol-back-pada-browser#comments</comments>
		<pubDate>Mon, 20 Apr 2009 09:52:50 +0000</pubDate>
		<dc:creator>kandar</dc:creator>
		
		<category><![CDATA[php]]></category>

		<category><![CDATA[relogin back php security session cookie login logout]]></category>

		<guid isPermaLink="false">http://www.kandar.info/?p=27</guid>
		<description><![CDATA[Suatu saat saya sedang membuat sebuah aplikasi. Salah satu featurenya adalah otentifikasi yang menggunakan email dan password bagi user yang akan login. Setelah menyelesaikan bagian otentifikasi ini kemudian saya mencobanya.
Semuanya tampak berjalan sesuai seperti yang saya harapkan. Halaman-halaman yang sudah ditetapkan hanya bisa dibuka ketika user sudah login sudah dapat terlindungi dengan baik. Hal ini [...]]]></description>
			<content:encoded><![CDATA[<p>Suatu saat saya sedang membuat sebuah aplikasi. Salah satu featurenya adalah otentifikasi yang menggunakan email dan password bagi user yang akan login. Setelah menyelesaikan bagian otentifikasi ini kemudian saya mencobanya.</p>
<p>Semuanya tampak berjalan sesuai seperti yang saya harapkan. Halaman-halaman yang sudah ditetapkan hanya bisa dibuka ketika user sudah login sudah dapat terlindungi dengan baik. Hal ini berarti user tidak bisa mengakses secara langsung halaman ini sebelum  ia login. Namun secara kebetulan saya menemukan hal yang cukup mengganjal. Ketika saya sudah logout dan mengklik tombol back pada browser saya, halaman yang seharusnya hanya bisa dibuka ketika user dalam kondisi login ternyata masih bisa ditampilkan oleh browser. Kenapa hal ini bisa terjadi? Padahal saya sudah menetapkan algoritma &#8220;jika session atau cookie user sudah terhapus maka halaman tersebut tidak dapat diakses&#8221;.<span id="more-27"></span></p>
<p>Untungnya ini hanya cache dari halaman yang saya kunjungi, yang kebetulan halaman yang seharusnya dilindungi oleh otentifikasi. Meskipun halaman tersebut muncul saya tetap tidak dapat berbuat apa-apa (mengganti password misalnya) karena untuk proses selanjutnya tetap dilakukan pengecekan session user. Namun hal ini tetap membuat saya tidak nyaman. Saya membayangkan jika user yang menggunakan aplikasi yang saya buat menekan tombol back pada browsernya setelah ia logout, sama seperti yang saya lakukan. Hal ini pasti akan membuat user tersebut tidak nyaman. Atau mungkin tidak akan kembali ke website tersebut karena merasa tidak aman.</p>
<p>Saya mencoba melakukan pengamatan pada beberapa website besar seperti Google, Yahoo, Facebook dan Friendster. Hal menarik yang saya temukan adalah selain Friendster, semua website tersebut langsung mengarahkan kehalaman login setelah saya menekan tombol back. Setelah melakukan pencarian saya menemukan bahwa browser membaca cache pada halaman yang sebelumnya saya buka walaupun halaman tersebut telah dilindungi oleh session.</p>
<p>Untuk mengatasi ini yang perlu dilakukan adalah memberikan informasi kepada browser agar tidak men-cache halaman yang ingin kita lindungi. Untuk itu dalam setiap halaman yang ingin kita lindungi bisa kita tambahkan kode berikut:</p>
<div class="programlisting">&lt;?php</p>
<p>header(&#8217;Expires: Mon, 1 Jul 1998 01:00:00 GMT&#8217;);<br />
header(&#8217;Cache-Control: no-store, no-cache, must-revalidate&#8217;);<br />
header(&#8217;Cache-Control: post-check=0, pre-check=0&#8242;, FALSE);<br />
header(&#8217;Pragma: no-cache&#8217;);<br />
header( &#8220;Last-Modified: &#8221; . gmdate( &#8220;D, j M Y H:i:s&#8221; ) . &#8221; GMT&#8221; );</p>
<p>?&gt;</p></div>
<p>Kode ini mengirimkan informasi kepada browser agar tidak menyimpan cache pada halaman yang kita lindungi. Sehingga ketika kita menekan tombol back setelah logut browser akan meminta lagi ke server dan bukan membaca cache di lokal. Perlu diperhatikan, agar meletakan kode ini sebelum ada output apapun (echo, print dll).</p>
<p>Semoga trik ini bisa membantu para developer sekalian, karena saya menemukan cukup banyak juga website-website yang seperti ini.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kandar.info/index.php/php/mencegah-kembali-login-setelah-loguot-dengan-menekan-tombol-back-pada-browser/feed</wfw:commentRss>
		</item>
		<item>
		<title>Create Apache Namebase Virtualhost on Ubuntu</title>
		<link>http://www.kandar.info/index.php/linux/create-apache-namebase-virtualhost-on-ubuntu</link>
		<comments>http://www.kandar.info/index.php/linux/create-apache-namebase-virtualhost-on-ubuntu#comments</comments>
		<pubDate>Wed, 15 Apr 2009 14:46:47 +0000</pubDate>
		<dc:creator>kandar</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.kandar.info/?p=22</guid>
		<description><![CDATA[This how-to have been tested on Ubuntu distro, but should be implemented in any Debian base distribution.
We need view more step to create name base virtual host. First change user as root. To do that type the following command:
sudo su
enter your root password
Copy default file from directory /etc/apache2/sites-available/ using a new name that you prefer [...]]]></description>
			<content:encoded><![CDATA[<p>This how-to have been tested on Ubuntu distro, but should be implemented in any Debian base distribution.</p>
<p>We need view more step to create name base virtual host. First change user as root. To do that type the following command:<span id="more-22"></span></p>
<div class="programlisting">sudo su</div>
<p>enter your root password</p>
<p>Copy default file from directory /etc/apache2/sites-available/ using a new name that you prefer as virtual host name. Type:</p>
<div class="programlisting">cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mynewsite</div>
<p>note: you can replace &#8216;mynewsite&#8217; with your own.</p>
<p>Make sure you have created a new folder for your root website directory. By default, Ubuntu placed root website at /var/www<br />
Next, we have to edit the file that we have just created. To do that type this command:</p>
<div class="programlisting">vim /etc/apache2/sites-available/mynewsite</div>
<p>Then view parameter:</p>
<div class="programlisting">&lt;VirtualHost *:80&gt;<br />
ServerAdmin webmaster@localhost<br />
ServerName www.mynewsite.com #change with your virtualhost name<br />
DocumentRoot /var/www/mynewsite/ #point to your root website directory<br />
&lt;Directory /&gt;<br />
Options FollowSymLinks<br />
AllowOverride None<br />
&lt;/Directory&gt;<br />
&lt;Directory /var/www/mynewsite/&gt; #point to your root website directory<br />
Options Indexes FollowSymLinks MultiViews<br />
AllowOverride All<br />
Order allow,deny<br />
allow from all<br />
&lt;/Directory&gt;</div>
<p>Then save it.</p>
<p>To activated your new virtualhost type the following command:</p>
<div class="programlisting">sudo a2ensite mynewsite</div>
<p>Note: &#8220;mynewsite&#8221; is a configuration file name for your new virtualhost. You can change it with yours.<br />
Last step is reload your apache by typing this command:</p>
<div class="programlisting">sudo /etc/init.d/apache2 reload</div>
<p>To test your new virtualhost you have to edit /etc/hosts file and add your local IP and your virtualhost name. To do that type this command:</p>
<div class="programlisting">vim /etc/hosts</div>
<p>Then add this following line:</p>
<div class="programlisting">127.0.0.1 www.mynewsite.com</div>
<p>Save and exit. Now open your borwser and type http://www.mynewsite.com. If everything correct, you will see your new site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kandar.info/index.php/linux/create-apache-namebase-virtualhost-on-ubuntu/feed</wfw:commentRss>
		</item>
		<item>
		<title>Membuat Namebase Virtualhost Apache pada Ubuntu</title>
		<link>http://www.kandar.info/index.php/linux/membuat-namebase-virtualhost-apache-pada-ubuntu</link>
		<comments>http://www.kandar.info/index.php/linux/membuat-namebase-virtualhost-apache-pada-ubuntu#comments</comments>
		<pubDate>Mon, 13 Apr 2009 12:17:25 +0000</pubDate>
		<dc:creator>kandar</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.kandar.info/?p=5</guid>
		<description><![CDATA[Panduan ini diujicobakan pada Ubuntu 8.10, namun bisa juga diterapkan pada distribusi lain yang juga berbasis Debian.
Untuk membuat virtual host berdasarkan nama diperlukan beberapa langkah. Berikut ini adalah tahapannya:
Ubah user menjadi root dengan mengetikan perintah berikut:
sudo su
masukan password root.
Copy file default yang ada di direktori /etc/apache2/sites-available/ dengan nama virtual host yang akan kita buat. Ketik [...]]]></description>
			<content:encoded><![CDATA[<p>Panduan ini diujicobakan pada Ubuntu 8.10, namun bisa juga diterapkan pada distribusi lain yang juga berbasis Debian.</p>
<p>Untuk membuat virtual host berdasarkan nama diperlukan beberapa langkah. Berikut ini adalah tahapannya:</p>
<p>Ubah user menjadi root dengan mengetikan perintah berikut:<span id="more-5"></span></p>
<div class="programlisting">sudo su</div>
<p>masukan password root.</p>
<p>Copy file default yang ada di direktori /etc/apache2/sites-available/ dengan nama virtual host yang akan kita buat. Ketik perintah berikut:</p>
<div class="programlisting">cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mynewsite</div>
<p>(Catatan: Silahkan isikan nama mynewsite dengan nama virtual host yang akan anda buat.)</p>
<p>Pastikan anda telah menyediakan folder tempat menyimpan file website anda. Pada setting bawaan, ubuntu meletakan folder root pada direktori /var/www.</p>
<p>Langkah berikutnya adalah dengan mengedit file virtual host yang tadi sudah kita buat. Ketikan perintah berikut:</p>
<div class="programlisting">vim /etc/apache2/sites-available/mynewsite</div>
<p>Kemudian edit beberapa parameter berikut ini:</p>
<div class="programlisting">&lt;VirtualHost *:80&gt;<br />
ServerAdmin webmaster@localhost<br />
ServerName www.mynewsite.com #ubah dengan nama virtual host anda</p>
<p>DocumentRoot /var/www/mynewsite/ #arahkan pada direktori website anda<br />
&lt;Directory /&gt;<br />
Options FollowSymLinks<br />
AllowOverride None<br />
&lt;/Directory&gt;<br />
&lt;Directory  /var/www/mynewsite/&gt; #arahkan pada direktori website anda<br />
Options Indexes FollowSymLinks MultiViews<br />
AllowOverride All<br />
Order allow,deny<br />
allow from all<br />
&lt;/Directory&gt;</p></div>
<p>Setelah selesai kemudian save.</p>
<p>Untuk mengkatifkan virtual host yang baru anda buat silahkan ketikan perintah berikut ini:</p>
<div class="programlisting">sudo  a2ensite mynewsite</div>
<p>Perhatian: mynewsite adalah nama dari file virtual host yang tadi sudah anda buat. Sesuaikan dengan kondisi anda.</p>
<p>Langkah terakhir adalah mereload apache dengan perintah berikut:</p>
<div class="programlisting">sudo /etc/init.d/apache2 reload</div>
<p>Untuk memastikan virutal host anda sudah berjalan dengan baik, Anda harus mengedit file hosts yang ada pada direktori /etc/ agar bisa mencobanya di local. Untuk itu ketikan perintah berikut ini:</p>
<div class="programlisting">vim /etc/hosts</div>
<p>lalu tambahkan baris berikut ini:</p>
<div class="programlisting">127.0.0.1 www.mynewsite.com</div>
<p>Save konfigurasi tersebut dan keluar. Buka browser anda dan ketikan alamat http://www.mynewsite.com</p>
<p>Jika tidak ada masalah kini virtual host anda sudah aktif.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kandar.info/index.php/linux/membuat-namebase-virtualhost-apache-pada-ubuntu/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
