Comincia a giocare nel 1993 nel Politehnica Timișoara, con cui in tre stagioni colleziona 51 presenze e una rete prima di passare ai rivali della Dinamo Bucarest nel corso della stagione 1995-1996. Dopo quattro stagioni (102 presenze e 8 reti) si trasferisce nel 1999 nella Primera División spagnola, al Deportivo Alavés, con cui gioca per due stagioni (66 presenze, 5 gol), arrivando a disputare la finale di Coppa UEFA 2000-2001, persa ai supplementari per 5-4 contro il Liverpool: in questa competizione Contra mette a referto 11 presenze e 3 reti.
Passato al Milan nel 2001, in rossonero gioca 29 partite con 3 reti in campionato, rispettivamente contro Hellas Verona, Venezia e nel derby contro l'Inter, e 10 presenze e un gol in Coppa UEFA, dove coi rossoneri si fermano contro i tedeschi del Borussia Dortmund in semifinale. Gioca con il Milan anche il precampionato seguente, ma in occasione del Trofeo TIM 2002 è protagonista di una rissa con lo juventino Edgar Davids poi proseguita negli spogliatoi.[1] All'inizio della stagione 2002-2003 viene così ceduto all'Atlético Madrid, dove è impiegato come titolare il primo anno (31 presenze), mentre nel successivo, complice un infortunio,[senza fonte] mette a referto solo 3 presenze.
Nel 2004 passa in Premier League al neopromosso West Bromwich, con cui mette a referto 5 presenze, ma già a gennaio 2005 torna in patria, nelle file del club in cui è cresciuto calcisticamente, il Polithecnica Timișoara, sua prima squadra in Romania, deciso anche a ritrovare la maglia della nazionale. Alla fine della stagione riesce a collezionare altre 11 presenze e a diventare un punto fermo della squadra. Nella stagione 2005-2006 torna in Spagna, al Getafe, dove guadagna il posto da titolare (25 presenze) sotto la guida del tecnico Bernd Schuster e torna in pianta stabile fra i convocati della selezione rumena guidata da Victor Pițurcă.
Nel gennaio 2009 rescinde il proprio contratto con il Getafe per tornare a giocare nella squadra della sua città, l'FC Timișoara, e aiutarla a vincere il titolo.
Il 17 settembre 2010, con il passaggio di Vladimir Petrović alla guida della nazionale serba in sostituzione di Radomir Antić, il Timișoara ha deciso di porlo alla guida della squadra, affidandogli il doppio incarico di giocatore e allenatore.[2] Il 6 dicembre il consiglio direttivo lo solleva dall'incarico.[3]
Il 23 luglio 2012 viene nominato tecnico del Fuenlabrada, nella seconda divisione spagnola.[4] Il 29 ottobre si dimette dall'incarico per ritornare in patria, lascia il club spagnolo al quarto posto in campionato in zona play-off dopo aver totalizzato 4 vittorie, 1 pareggio e 3 sconfitte.[5][6]
Il giorno seguente viene ufficializzato il suo approdo al Petrolul Ploiești, con cui firma un contratto di un anno e mezzo.[7] Conclude il campionato al terzo posto ottendendo l'accesso al secondo turno dei preliminari dell'Europa League e vince la Coppa di Romania battendo in finale il Cluj per 1 a 0. Il secondo anno inizia subito con la sconfitta per 3 a 0 da parte della Steaua Bucarest nella finale nella Supercoppa di Romania. Nel secondo turno nei preliminari dell'Europa League batte il Víkingur Gøta per 3 a 0 all'andata e 4 a 0 il ritorno accedendo così al terzo turno dei preliminari dove elimina il Vitesse con il risultato di 1 a 1 all'andata e 2 a 1 al ritorno, ma viene eliminato nei play-off dal Swansea City con la sconfitta di 5 a 1 all'andata e la vittoria di 2 a 1 al ritorno. Lascia il club rumeno in semifinale nella Coppa di Romania e al secondo posto in campionato, con 45 punti a quattro punti dalla vetta, dopo aver totalizzato 12 vittorie, 9 pareggi e una sconfitta.
Il 10 marzo 2014 si dimette dalla guida del club rumeno per sedersi sulla panchina del Getafe facendo così ritorno al club spagnolo, ma questa volta nelle vesti di allenatore, firmando un contratto di due anni e mezzo e prendendo la squadra al quindicesimo posto, a un punto dalla zona retrocessione.[8] Conclude il campionato spagnolo al tredicesimo posto. Il 5 gennaio 2015 dopo appena 17 partite in campionato con la squadra al sedicesimo posto dopo aver ottenuto 4 vittorie, 5 pareggi e 8 sconfitte e ai quarti di finale della Coppa di Spagna si dimette per trasferirsi al Guangzhou R&F, squadra che milita nella massima divisione cinese.[9] Il 22 luglio, a seguito di vari risultati negativi e con l'eliminazione ai quarti di finale nella Coppa della Cina con la sconfitta per 2 a 1 contro lo Shanghai SIPG, viene esonerato, lasciando la squadra all'undicesimo posto con 21 punti e a 3 lunghezza dalla zona retrocessione, dopo aver ottenuto 5 vittorie, 6 pareggi e 9 sconfitte in campionato.[10]
Il 15 giugno 2016 viene nominato tecnico dell'Alcorcón nella seconda divisione spagnola.[11] Il 12 ottobre dopo appena 2 vittorie, 3 pareggi e 4 sconfitte viene esonerato.[12]
Il 16 febbraio 2017 diventa allenatore del Dinamo Bucarest, firmando un contratto di 4 mesi con il club che attualmente si trova al sesto posto in campionato.[13] Il 16 maggio con la squadra attualmente al terzo posto, valido per la qualificazione al terzo turno di preliminare dell'Europa League firma il rinnovo del contratto.[14]
Il 17 settembre 2017 viene annunciato dalla federazione rumena come prossimo allenatore della Romania.[15] Il giorno seguente di comune accordo rescinde il contratto con la Dinamo Bucarest.[16] Il 22 settembre viene ufficializzata la sua nomina come nuovo tecnico della Romania, sostituendo Christoph Daum.[17]
^Cosmin Contra abandona el Fuenlabrada, su lasegundab.es, 29 octubre 2012. URL consultato il 18 maggio 2017 (archiviato dall'url originale il 25 giugno 2017).